我有一个SQL查询:
SELECT count(DISTINCT(email_address))
FROM Mytable
WHERE TableID = '101'
以上查询运行良好。
我希望获得电子邮件地址的结果,其中TableID具有不同的值,如123,421。
那么,当我编写以下查询时,为什么我在MySQLWorkbencch中返回0结果?
SELECT count(DISTINCT(email_address))
FROM Mytable
WHERE TableID = '101'
AND TableId = '123'
AND TableID = '421'
答案 0 :(得分:5)
使用OR
代替AND
。使用AND
,您需要将列值等于3个不同的常量值。这违反了宇宙的规律。
SELECT count(DISTINCT(email_address))
FROM Mytable
WHERE TableID = '101' OR TableId = '123' OR TableID = '421';
或者,您可以使用IN
子句。就实际执行而言,它们是等效的,但在某些情况下IN
可能更容易阅读,尤其是如果列表变得更长:
SELECT count(DISTINCT(email_address))
FROM Mytable
WHERE TableID IN ('101', '123', '421');
答案 1 :(得分:2)
请改用IN Clause。
SELECT count(DISTINCT(email_address))
FROM Mytable
WHERE TableID IN ('101','123','421')
答案 2 :(得分:2)
使用 IN 或 OR
使用 OR :
SELECT count(DISTINCT(email_address))
FROM Mytable
WHERE TableID = '101'
OR TableId = '123'
OR TableID = '421'
使用 IN :
SELECT COUNT(DISTINCT(EMAIL_ADDRESS))
FROM MYTABLE
WHERE TABLEID IN ('101','123','421');
<强>解释强>
'狗等于狗AND
狗等于猫AND
狗等于牛'
返回false
'狗等于狗OR
狗等于猫OR
狗等于牛'
返回true
'狗是否在列表中包含狗,猫,牛'
返回true
答案 3 :(得分:0)
尝试使用OR
或IN
子句。 AND
在所有指定条件为真时返回记录,在您的情况下不会发生返回0结果或空结果的原因。
SELECT count(DISTINCT(email_address))
FROM Mytable
WHERE TableID = '101'
OR TableId = '123'
OR TableID = '421';
OR
SELECT count(DISTINCT(email_address))
FROM Mytable
WHERE TableID IN('101','123','421');