对多行中的列值进行MySQL过滤?
假设我有这两个表:对多行中的列值进行MySQL过滤?
|Customers | |Purchases |
---------------- -----------------
|CusID |----- |PurchaseID |
|CusName | |---<|CusID |
|CusAge | |ItemName |
|CusDateAdded | |DatePurchased |
我需要筛选我的结果由多个itemNames的设置。假设我想退回所有年龄在18岁至24岁之间购买“相机”和“电话”的所有客户。当谈到时间,在采购表中是如何做的多行一个过滤器ITEMNAME列过滤然而
SELECT CusID
FROM Customers AS C
JOIN Purchases AS P
ON C.CusID = P.CusID
WHERE C.CusAge BETWEEN 18 AND 24
:我可以运行下面的查询来获取所有记录年龄范围之间的客户?假设没有多个查询是可能的?
SELECT C.CusID
FROM Customers AS C
JOIN Purchases AS P ON C.CusID = P.CusID
WHERE C.CusAge BETWEEN 18 AND 24
AND ItemName IN ('camera','phone')
GROUP BY C.CusID
HAVING count(distinct ItemName) = 2
集团由客户,并只返回这两个项目。
我相信这将会回答你的问题:SQL FIDDLE
SELECT C.CustID,C.CustName,P.ItemName
FROM Customers AS C
JOIN Purchases AS P ON C.CustID = P.CustID
GROUP BY C.CustID,C.CustName,P.ItemName
HAVING P.ItemName IN ('camera','phone')
你总是可以在这个条件之上放置一个where子句group by statement .. – Rafay 2014-09-19 15:02:24
当记录被添加到为Item3 ='phone'购买Cust3的表时,即使他们没有购买'camera',Cust3也会出现在结果中“ – commanderZiltoid 2014-09-19 15:30:51
我可能会看这个错误,请纠正我,如果我是,但如果客户有更多的购买不仅仅是“相机”和'电话'。假设他们还购买了一个'衬衫'和'帽子',这将使他们在采购表中的总记录数等于4.因为我只关心'照相机'和'手机',所以当我运行HAVING count(distinct ItemName)= 2 ,这是否会忽视购买了相机和手机以及其他物品的顾客? – commanderZiltoid 2014-09-19 14:16:54
但是在你的where子句中,你只能看到AND ItemName IN('camera','phone')'。所以没关系,如果有其他人 – 2014-09-19 15:58:59
你肯定是正确的。奇迹般有效! – commanderZiltoid 2014-09-19 17:51:14