如果我有两个表,则一个是:
CAR
| ID | MAKER |
---------------
| 1 | Honda |
| 2 | Toyota |
| 3 | Ford |
| 4 | Honda |
| 5 | Ford |
| 6 | Honda |
其中id是汽车识别号码,而制造商是汽车的制造商
,另一个是
购买
| CUSTID | CARID |
------------------
| 1 | 1 |
| 1 | 4 |
| 1 | 6 |
| 2 | 1 |
| 2 | 2 |
| 2 | 4 |
| 2 | 6 |
| 3 | 2 |
| 4 | 5 |
| 4 | 2 |
其中custid是客户的ID,carid是特定车辆的ID
有没有办法将两者合二为一,然后找出哪些客户购买了所有Hondas
?
答案 0 :(得分:1)
您需要将两个表与CarID
一起加入,并将其与CustID
分组,并且需要使用HAVING
子句来获取1,4,6中CarID的所有记录。 3
子句中的HAVING
表示CarID的数量(即1,4和6)。
SELECT P.CustID, COUNT(CarID)
FROM Purchase P
JOIN Car C
ON P.Carid = C.ID
WHERE CarID IN (1,4,6)
GROUP BY CustID
HAVING COUNT(CarID) = 3;
或者不使用ID直接使用名称:
SELECT P.CustID, COUNT(CarID)
FROM Purchase P
JOIN Car C
ON P.Carid = C.ID
WHERE Maker = 'Honda'
GROUP BY CustID
HAVING COUNT(CarID) = 3;
获取计数(例如,在这种情况下为3)使用此查询
SELECT COUNT(Maker) FROM Car WHERE Maker = 'Honda';
SELECT P.CustID, COUNT(CarID)
FROM Purchase P
JOIN Car C
ON P.Carid = C.ID
WHERE Maker = 'Honda'
GROUP BY CustID
HAVING COUNT(CarID) = (SELECT COUNT(Maker) FROM Car WHERE Maker = 'Honda');
输出:
╔════════╦══════════════╗
║ CUSTID ║ COUNT(CARID) ║
╠════════╬══════════════╣
║ 1 ║ 3 ║
║ 2 ║ 3 ║
╚════════╩══════════════╝
答案 1 :(得分:0)
尝试此查询:
select P.CustID
from purchase P
inner join CAR C on P.CarID=C.CarID
WHERE C.Maker like '%Honda%'
group by CustID
having count(P.CarID)=
(select count(*) from CAR C where C.Maker like '%Honda%')
<强> SQL FIDDLE 强>
答案 2 :(得分:0)
试试这个:
SELECT A.*, B.*, C.* FROM purchase AS A
INNER JOIN(customer AS B) ON(A.cust_id = B.cust_id)
INNER JOIN(car AS C) ON(A.car_id = C.car_id)
WHERE A.car_id = '1'
我假设您有customer
表。请记住,您的purchase
表格必须包含purchase_id
等主要字段。并且WHERE A.car_id = '1'
这是您的本田ID为1