我们可以在WHERE子句中为同一列使用多个AND条件吗?

时间:2018-05-18 21:09:36

标签: mysql sql

我尝试将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. N.E.   Seattle     WA          98105       555-2671        10001       10      2
10001       Doris           Hartwig         4726 - 11th Ave. N.E.   Seattle     WA          98105       555-2671        10001       22      1

More data in image

3 个答案:

答案 0 :(得分:3)

条件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.CustFirstNamec.CustLastName添加到GROUP BY。或者,您只能按ID分组,然后在名字和姓氏上使用MIN()MAX()。两种方式都或多或少相同。

此查询仅在您的数据永远不会让客户具有相同StyleID次数的情况下才有效(例如:客户1001有3条记录StyleID 15,24和24)。< / p>

答案 1 :(得分:1)

WHERE条件对FROM子句创建的行有效,而不是跨行,如果你尝试WHERE somefield = 1 AND somefield = 2,你永远不会得到结果,一个字段不能同时有两个值。

我认为你在寻找的是

SELECT ...
FROM ...
WHERE somefield IN (15, 24)
GROUP BY ...
HAVING COUNT(DISINCT somefield ) = 2
;

答案 2 :(得分:0)

如果您使用单个条件的查询未返回任何行,则查询将不会返回任何行。

请试试这个:

SELECT CONCAT(c.CustFirstName," ",c.CustLastName) AS CustomerName
FROM Musical_Preferences mp
JOIN Customers c ON c.CustomerID = mp.CustomerID 
WHERE mp.StyleID = 24;

它会返回什么吗?