我想在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
怎么做?
提前致谢
答案 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文本可以使用数组编程语言中的数组动态生成。
对于大量值,内联视图变得难以处理,并且您可以从表中获得更好的性能,而不是视图。