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 BY
và HAVING
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