查询返回零结果

时间:2014-07-11 04:53:52

标签: mysql sql database

我有一个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'

4 个答案:

答案 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

  1. 使用 OR

    SELECT count(DISTINCT(email_address))
    FROM Mytable
    WHERE  TableID = '101'
    OR  TableId = '123'
    OR    TableID = '421'
    
  2. 使用 IN

    SELECT COUNT(DISTINCT(EMAIL_ADDRESS))
    FROM MYTABLE
    WHERE TABLEID IN ('101','123','421');
    
  3. <强>解释

    • 您正在尝试检查单个值是否与3个不同的唯一值匹配,类似于检查

    '狗等于狗AND狗等于猫AND狗等于牛'

    返回false

    • 使用选项1,使用OR,就像

    '狗等于狗OR狗等于猫OR狗等于牛'

    返回true

    • 使用选项2,使用IN,就像

    '狗是否在列表中包含狗,猫,牛'

    返回true

答案 3 :(得分:0)

尝试使用ORIN子句。 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');