Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL - Chọn hàng nếu xuất hiện nhiều hơn x lần trong bảng khác

Tôi giả định (và hy vọng) rằng bạn không lưu tên người dùng hai lần, vì điều đó dẫn đến các vấn đề về chất lượng dữ liệu khi người dùng thay đổi tên của họ.

Giả sử các bảng có cấu trúc như sau:

CREATE TABLE
  Members
(
    UserID INT,
    Name VARCHAR(15)
);

INSERT INTO
  Members
VALUES
(111, 'Peter'),
(222, 'Bart'),
(333, 'Joe'),
(444, 'Andrew');

CREATE TABLE
  Orders
(
   OrderID INT,
   UserID INT
);

INSERT INTO
  Orders
VALUES
(777, 111),
(888, 333),
(999, 111),
(101, 444),
(102, 111),
(103, 333);

Bạn có thể sử dụng GROUP BYHAVING mệnh đề này sẽ cung cấp cho bạn UserID của tất cả người dùng có nhiều hơn 1 (hoặc bất kỳ số nào bạn chọn) đơn đặt hàng. Sau đó, bạn tham gia vào Members bảng để lấy tên.

SELECT
  Orders.UserID,
  Members.Name
FROM
  Orders
INNER JOIN
  Members
  ON Orders.UserID = Members.UserID
GROUP BY
  UserID,
  Members.Name
HAVING
  COUNT(OrderID) > 1;

SQLFiddle: http://sqlfiddle.com/#!9/1dadc4/2

Tuy nhiên, nếu bạn đã lưu các tên (và tên đó không thay đổi), thì bạn có thể bỏ qua JOIN như bên dưới:

SELECT
  UserID,
  Name
FROM
  Orders
GROUP BY
  UserID,
  Name
HAVING
  COUNT(OrderID) > 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cảnh báo:PDOStatement ::execute ():SQLSTATE [HY093]:Số tham số không hợp lệ:tham số không được xác định trong ... filetext

  2. MySQL LEFT JOIN 3 bảng

  3. Cách tìm giá trị bị thiếu giữa hai bảng Mysql

  4. Cách hàm OCTET_LENGTH () hoạt động trong MySQL

  5. Gửi email hàng loạt bằng SwiftMailer