我目前的查询无法正常工作,只有在我检查一个值而不是两个值时才有效。但我需要它来检查两个。我得到的返回值基本上是一个空的空间。我的猜测是,它不知道哪个" pid"使用它所以什么也不返回。
SELECT cid FROM orders
WHERE pid = 'p07' AND pid = 'p01'
答案 0 :(得分:2)
您可以使用聚合来实现此目的。没有一行可以同时拥有这两个值,因此您需要查看它们的组:
SELECT cid
FROM orders
WHERE pid IN ('p07', 'p01')
GROUP BY cid
HAVING COUNT(DISTINCT pid) = 2;
答案 1 :(得分:0)
如果您使用的是 Oracle数据库 ,则可以使用 INTERSECT 关键字来获取答案。以下是相同的语法:
(SELECT cid FROM orders,其中pid =' p07') 相交 (选择cid FROM pid =' p01')的订单。
但是如果您使用的是MySQL,那么 INTERSECT 关键字将无效。
以下是 MySql数据库 的解决方案:
SELECT t1.cid from( (选择DISTINCT cid来自订单,其中pid =' p07') UNION ALL (SELECT DISTINCT cid FROM pid =' p01') )AS t1 GROUP BY cid HAVING count(*)> = 2;
如果您想在 Oracle数据库 中使用上述查询,那么语法会有一些变化。以下是相同的语法:
SELECT t1.cid from( (选择DISTINCT cid来自订单,其中pid =' p07') UNION ALL (SELECT DISTINCT cid FROM pid =' p01') )t1 GROUP BY cid HAVING count(*)> = 2