选择值中的字段位置(如果值中的字段不存在,则返回null)

时间:2015-05-12 02:58:18

标签: mysql sql

我想在where子句中选择数据。假设我有$值:1,2,3,4

然后我想从表中选择该值中的行。

  SELECT `date` from another_table where id in (1,2,3,4)

如果another_table只有id为1,2和3的行,则表示id为4不存在。我希望仍然选择4的id仍然返回null或nol或NEVER。

      another_table
     -------+-------------+
     |  id  |  date       |
     ----------------------    
         1     Yesterday
         2      Today
         3      Tomorow
         5      Today

预期结果将是

     -------+-------------+
     |  id  |  date       |
     ----------------------    
         1     Yesterday
         2      Today
         3      Tomorow
         4      Never

怎么做?

提前致谢

1 个答案:

答案 0 :(得分:4)

作为一个选项,使用内联视图作为行源,并执行外部联接操作。我们可以使用IF表达式来检查是否从another_table返回了匹配的行,我们知道如果有匹配的行,则id值不会为NULL,连接谓词(在ON子句中)保证我们。)

举个例子:

SELECT n.id
     , IF(a.id IS NULL,'Never',a.date) AS `date`
  FROM ( SELECT 1 AS id
         UNION ALL SELECT 2
         UNION ALL SELECT 3
         UNION ALL SELECT 4
       ) n
  LEFT
  JOIN another_table a
    ON a.id = n.id
 ORDER BY n.id

执行内联视图查询,并将结果具体化到临时表中(MySQL将其称为派生表)。外部查询运行时,n实际上是一个包含4行的表。

显然,如果必须更改id值列表,则需要更改视图定义。内联视图的SQL文本可以使用数组编程语言中的数组动态生成。

对于大量值,内联视图变得难以处理,并且您可以从表中获得更好的性能,而不是视图。