我们可以在 WHERE 子句中对同一列使用多个 AND 条件吗? [复制]
Posted
技术标签:
【中文标题】我们可以在 WHERE 子句中对同一列使用多个 AND 条件吗? [复制]【英文标题】:Can we use multiple AND conditions for the same column in WHERE clause? [duplicate] 【发布时间】:2018-05-18 21:09:36 【问题描述】:我尝试在WHERE
子句中对同一列使用AND
,但它没有给我任何输出。但是数据集中有两个满足给定条件的客户名称。我哪里出错了?
SELECT CONCAT(c.CustFirstName," ",c.CustLastName) AS CustomerName
FROM Musical_Preferences mp
JOIN Customers c ON c.CustomerID = mp.CustomerID
WHERE mp.StyleID = 15 AND mp.StyleID = 24;
当我将OR
用于WHERE
子句中的同一列时,上述查询运行良好,但为什么不用于AND
?
我的数据:
CustomerID CustFirstName CustLastName CustStreetAddress CustCity CustState CustZipCode CustPhoneNumber CustomerID StyleID PreferenceSeq 10001 Doris Hartwig 4726 - 11th Ave. N.E.西雅图 WA 98105 555-2671 10001 10 2 10001 Doris Hartwig 4726 - 11th Ave. N.E.西雅图 WA 98105 555-2671 10001 22 1【问题讨论】:
这应该可以。您定义了完全相同的条件mp.StyleID = 24 and mp.StyleID = 24
。你能展示一些示例数据吗?
我投票结束,因为“愚蠢”
“看起来 mysql 工作台只考虑第一个条件”:你为什么这么说?你的表中有什么数据,你期望什么输出,你得到了什么?
CustomerID CustFirstName CustLastName CustStreetAddress CustCity CustState CustZipCode CustPhoneNumber CustomerID StyleID PreferenceSeq 10001 Doris Hartwig 4726 - 11th Ave. N.E.西雅图 WA 98105 555-2671 10001 10 2 10001 Doris Hartwig 4726 - 11th Ave. N.E.西雅图 WA 98105 555-2671 10001 22 1
@Sree 你能把这些数据放在问题中而不是评论中吗?你不能在评论中格式化它
【参考方案1】:
条件StyleID = 15 AND StyleID = 24
永远不会返回任何内容,因为它永远不会为真。所以你得到的是预期的。如果要获取同时拥有StyleID
15 和 24 的客户(在不同的记录中),则需要按客户对记录进行分组:
SELECT CONCAT(c.CustFirstName," ",c.CustLastName) AS CustomerName
FROM Musical_Preferences mp
JOIN Customers c ON c.CustomerID = mp.CustomerID
WHERE mp.StyleID IN(15, 24)
GROUP BY c.CustomerID, c.CustFirstName, c.CustLastName
HAVING COUNT(mp.CustomerID) = 2;
我将c.CustFirstName
和c.CustLastName
添加到GROUP BY
。或者,您只能按 ID 分组,然后在名字和姓氏上使用 MIN()
或 MAX()
。两种方式都差不多。
此查询仅在您的数据永远不会有一个客户具有相同 StyleID
的情况下才有效(例如:客户 1001 有 3 条记录具有 StyleID
15、24 和 24)。
【讨论】:
处理具有相同styleid的多行,HAVING COUNT(DISTINCT mp.styleid) = 2
【参考方案2】:
WHERE 条件作用于由 FROM 子句创建的行,而不是跨行,如果您尝试 WHERE somefield = 1 AND somefield = 2
,您将永远不会得到结果,一个字段不能同时有两个值。
我认为你正在寻找的是
SELECT ...
FROM ...
WHERE somefield IN (15, 24)
GROUP BY ...
HAVING COUNT(DISINCT somefield ) = 2
;
【讨论】:
【参考方案3】:如果您的单一条件查询未返回任何行,则您的查询将不会返回任何行。
请试试这个:
SELECT CONCAT(c.CustFirstName," ",c.CustLastName) AS CustomerName
FROM Musical_Preferences mp
JOIN Customers c ON c.CustomerID = mp.CustomerID
WHERE mp.StyleID = 24;
它会返回任何东西吗?
【讨论】:
不,它也给出了没有 WHERE 条件的结果。我试过了,它给了我所有的 CustomerNames,总共 36 行。 单身WHERE
条件怎么样?
当我尝试仅使用 'where mp.StyleID = 24' 时,它给出了 2 个正确的结果,同样,当我尝试使用 'where mp.StyleID = 15' 时,它给出了 3 个结果,这又是正确的.对于 StyleID = 15 和 StyleID = 24,有两个客户,我应该得到这两个名字,但我没有得到任何结果。
我有点放弃了。这是一个非常简单的案例——如果为真的话——应该作为一个 MySQL 错误提交。你用的是什么 MySQL 版本?
对不起。我不清楚 - 我的意思是“我认为 OP 想要一件他没有明确要求的东西” - 他期待 WHERE-AND 返回“喜欢爵士和摇滚的人”,因为他的 WHERE-OR 做到了(发生to) 返回“喜欢爵士乐或摇滚乐的人”。也许他应该提出另一个问题,而不是解决这个问题......以上是关于我们可以在 WHERE 子句中对同一列使用多个 AND 条件吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章