Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果客户购买了特定物品,请列出他们购买的物品_Sql_Sqlite - Fatal编程技术网

Sql 如果客户购买了特定物品,请列出他们购买的物品

Sql 如果客户购买了特定物品,请列出他们购买的物品,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

我有以下表格:

表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          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
;
分组方式为。。。通过计数
可以确保所示的两种物品都已购买<只有当个别(类型的)项目可以为特定客户列出多次时,才需要“代码>不同的”

查看它的实际操作:


如果需要调整/进一步详细信息,请发表意见。

如何在此列表中添加其他项目?所以购买物品的清单,比如说烤面包机和水壶