首页 > 解决方案 > 我们可以在 WHERE 子句中对同一列使用多个 AND 条件吗?

问题描述

我尝试AND在子句中使用同一列WHERE,但它没有给我任何输出。但是数据集中有两个满足给定条件的客户名称。我哪里出错了?

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. NE Seattle WA 98105 555-2671 10001 10 2
10001 Doris Hartwig 4726 - 11th Ave. NE Seattle WA 98105 555-2671 10001 22 1

图片中的更多数据

标签: mysqlsql

解决方案


条件StyleID = 15 AND StyleID = 24永远不会返回任何东西,因为它永远不会为真。所以你得到的是预期的。如果要获取同时具有StyleID15 和 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_ 或者,您只能按 ID 分组,然后在名字和姓氏上使用或。两种方式或多或少都相同。c.CustLastNameGROUP BYMIN()MAX()

此查询仅在您的数据永远不能有一个客户StyleID多次使用相同的客户时才有效(例如:客户 1001 有 3 条记录,分别为StyleID15、24 和 24)。


推荐阅读