【问题标题】:How can i check for multiple values in the same variable SQL如何检查同一变量 SQL 中的多个值
【发布时间】:2015-05-02 08:12:58
【问题描述】:

所以基本上,我想返回订购了特定产品“p07 & p01”的用户的“cid”(客户 ID)。

我当前的查询不起作用,它仅在我检查一个值而不是两个值时才起作用。但我需要它来检查两个。我得到的返回值基本上是一个空白。我的猜测是,它不知道要使用哪个“pid”,所以它什么也不返回。

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

【问题讨论】:

  • 能否提供样本数据和预期结果?另请使用适当的 RDBMS 标记您的问题。

标签: mysql sql sql-server database oracle


【解决方案1】:

您可以为此目的使用聚合。单行不能同时具有这两个值,因此您需要查看它们的组:

SELECT cid
FROM orders 
WHERE pid IN ('p07', 'p01')
GROUP BY cid
HAVING COUNT(DISTINCT pid) = 2;

【讨论】:

  • 我假设您的意思是 WHERE pid = 'p07' OR pid = 'p01' 不是 AND(或 WHERE pid IN ('p01', 'p07')
  • @JustinCave 。 . .谢谢。
  • @GordonLinoff 你能解释一下“分组依据”和“拥有”计数的作用吗?
【解决方案2】:

如果您使用的是 Oracle 数据库,则可以使用 INTERSECT 关键字来获得答案。以下是相同的语法:

(从 pid = 'p07' 的订单中选择 cid) 相交 (从 pid = 'p01' 的订单中选择 cid)。

但如果您使用的是 MySQL,则此 INTERSECT 关键字将不起作用。

以下是MySql数据库的解决方案:

从 ( (从 pid = 'p07' 的订单中选择 DISTINCT cid) 联合所有 (从 pid = 'p01' 的订单中选择 DISTINCT cid) ) AS t1 GROUP BY cid HAVING count(*) >= 2;

如果您想在 Oracle 数据库 中使用上述查询,则语法会有一点变化。以下是相同的语法:

从 ( (从 pid = 'p07' 的订单中选择 DISTINCT cid) 联合所有 (从 pid = 'p01' 的订单中选择 DISTINCT cid) ) t1 GROUP BY cid HAVING count(*) > = 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多