如何在同一个变量SQL中检查多个值

时间:2015-03-02 02:47:28

标签: mysql sql sql-server database oracle

基本上,我想回归" cid"已订购某种产品的用户(客户ID)" p07& P01"

我目前的查询无法正常工作,只有在我检查一个值而不是两个值时才有效。但我需要它来检查两个。我得到的返回值基本上是一个空的空间。我的猜测是,它不知道哪个" pid"使用它所以什么也不返回。

SELECT cid FROM orders 
WHERE pid = 'p07' AND pid = 'p01'

2 个答案:

答案 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