Có hai lựa chọn khá đơn giản.
Bạn có thể tham gia hai lần với bàn bán, mỗi lần một món. Nếu bạn bỏ qua DISTINCT
, bạn có thể nhận được các giá trị trùng lặp nếu cửa hàng bán nhiều hơn một cái búa hoặc nhiệt kế.
SELECT DISTINCT s.shopname
FROM shops s
JOIN sale s1 ON s.shopcode = s1.shopcode AND s1.product='hammer'
JOIN sale s2 ON s.shopcode = s2.shopcode AND s2.product='thermometer';
... hoặc bạn có thể tìm tất cả các que diêm bằng búa hoặc nhiệt kế và đếm xem có bao nhiêu giá trị khác nhau. Nếu có hai giá trị có thể có và bạn nhận được cả hai, bạn đã đặt xong.
SELECT s.shopname
FROM shops s
JOIN sale s1 ON s.shopcode = s1.shopcode
WHERE s1.product IN('hammer','thermometer')
GROUP BY s.shopname
HAVING COUNT(DISTINCT s1.product)=2;
Một SQLfiddle để kiểm tra cả hai .