Sql 如果客户购买了特定物品,请列出他们购买的物品
我有以下表格: 表1Sql 如果客户购买了特定物品,请列出他们购买的物品,sql,sqlite,Sql,Sqlite,我有以下表格: 表1 ID CustomerName CustomerAddress 1 Joe Bloggs 123 The Street 2 Joe Bloggs Senior 345 The Close 3 Joe Bloggs Jnr 1 The Road 表2 Table1_ID Item 1 Toaster 1 Kettle 1 Microwave 3
ID CustomerName CustomerAddress
1 Joe Bloggs 123 The Street
2 Joe Bloggs Senior 345 The Close
3 Joe Bloggs Jnr 1 The Road
表2
Table1_ID Item
1 Toaster
1 Kettle
1 Microwave
3 Toaster
2 Iron
2 Kettle
2 Microwave
2 Slow Cooker
我想要的是一份客户名单和他们购买的其他产品——如果他们购买了烤面包机的话
我使用了以下SQL查询
SELECT CustomerName, Item
FROM Table1
LEFT JOIN Table2
ON TABLE1.ID = TABLE2.Table1_ID
这显然给了我各个客户购买的所有物品
如果我尝试在
SELECT CustomerName, Item
FROM Table1
LEFT JOIN Table2
ON TABLE1.ID = TABLE2.Table1_ID
WHERE Item = 'Toaster'
我显然没有其他的东西
我完全被难倒了,怎么做。看起来你在试图列出客户购买的所有产品;您需要像下面这样使用
GROUP\u CONCAT()
。有关更多信息,请参阅
select t1.*, xxx.ItemList
from table1 t1 join
(
select table1id,group_concat(item) as ItemList
from table2
group by table1id ) xxx on t1.ID = xxx.table1id;
这需要一个子查询,而不是
左连接
:
SELECT
customerName
, item
FROM Table1
JOIN Table2
USING (id)
WHERE id IN
(SELECT
id
FROM Table2
WHERE item = 'Toaster')
AND
item != 'Toaster'
ORDER BY customerName, item
;
子查询检索购买烤面包机的人的id。外部查询接受这些ids,并列出具有其(不同于烤面包机)项的人员
查看它的实际操作:
延伸
正如评论中所要求的:要检查两个特定项目,而不是单个项目,您可以:
SELECT
customerName
, item
FROM Table1
JOIN Table2
USING (id)
WHERE id IN
(SELECT
id
FROM Table2
WHERE item in ('Toaster', 'Kettle')
GROUP BY id
HAVING COUNT(DISTINCT item) = 2
)
AND
item NOT IN ('Toaster', 'Kettle')
ORDER BY customerName, item
;
分组方式为。。。通过计数
可以确保所示的两种物品都已购买<只有当个别(类型的)项目可以为特定客户列出多次时,才需要“代码>不同的”
查看它的实际操作:
如果需要调整/进一步详细信息,请发表意见。如何在此列表中添加其他项目?所以购买物品的清单,比如说烤面包机和水壶