【问题标题】:Return null values IN clause mysql返回空值 IN 子句 mysql
【发布时间】:2016-07-19 09:09:33
【问题描述】:

在数据库中找不到数据时找不到打印。例如在我的数据库中我没有56443,因此它应该打印'not found'

SELECT uid, (CASE WHEN (u.uid = null) THEN 'not found' ELSE 'found' END) as result
FROM (SELECT uid
            FROM users
            WHERE uid IN (1,2,56443,3)) as u;

得到如下结果

+--------+--------+
| uid    | result|
+--------+--------+
| 1      | found | 
| 2      | found |
| 3      | found |
+--------+--------+

我也期待not found56443 的行

【问题讨论】:

  • 您应该使用 u.uid is null 而不是 u.uid = null,因为在 sql 中使用 = 运算符无法比较 null 值。

标签: mysql sql in-clause


【解决方案1】:

您需要使用不同的方法。您需要使用 UNION ALL 创建一个包含所有值的内联视图,然后将其与 users 表左连接:

SQL Fiddle

查询 1

SELECT a.uid, (CASE WHEN (u.uid is null) THEN 'not found' ELSE 'found' END) as     result
FROM (select 1 as UID FROM dual
      UNION ALL
      select 2 as UID FROM dual
      UNION ALL
      select 56443 as UID FROM dual
      UNION ALL
      select 3 as UID FROM dual) as a
LEFT JOIN users u on a.uid = u.uid

[结果]

|   UID |    result |
|-------|-----------|
|     1 |     found |
|     2 |     found |
|     3 |     found |
| 56443 | not found |

【讨论】:

  • 哇。非常感谢您的帮助。我真的很感激
  • 查询适用于这种特殊情况。如果您有一组不同的值,那么您必须动态地形成此查询,否则您将无法使用此查询。最好在应用程序级别执行此虚拟行生成。 @mubeen
  • @1000111 谢谢你的担心。但是查询很好:)
【解决方案2】:

那是因为您正在将一个值与 null aka 进行比较。未知。与空值进行比较时,始终使用 IS 运算符。 CASE WHEN (u.uid is null) THEN 'not found' ELSE 'found' END) 作为结果

试试这个(更新答案):

SELECT u2.uid, (CASE WHEN (u1.uid is null) THEN 'not found' ELSE 'found' END) 
as     result
FROM users u1
RIGHT JOIN 
(select 1 as uid union all
 select 2 as uid union all
 select 3 as uid union all
 select 56443 as uid
) u2
on u1.uid = u2.uid

【讨论】:

  • 试试看,结果一样:( .
  • 不,sqlfiddle.com/#!9/c38d26/1 因为用户中仍然没有 56443
  • 这也有效!谢谢.. 但我只能标记一个答案
  • 我注意到另一个答案。太棒了..你得到了正确的答案很好。干杯!
猜你喜欢
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 2021-05-11
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多