即使我的IN子句中没有行匹配,我希望我的SQL查询返回一行。
例如,这个查询:
SELECT id, foo
FROM table
WHERE id IN (0, 1, 2, 3)
将返回:
id|foo
0|bar
1|bar
2|bar
3|null
但我有(因为没有id为3的行):
id|foo
0|bar
1|bar
2|bar
我能找到这个伎俩:
SELECT tmpTable.id, table.bar
FROM (
SELECT 0 as id
UNION SELECT 1
UNION SELECT 2
UNION SELECT 3
) tmpTable
LEFT JOIN
(
SELECT table.foo, table.id
FROM table
WHERE table.id IN (0, 1, 2, 3)
) table
on table.id = tmpTable.id
有更好的方法吗?
奖励:如何使用myBatis的列表变量?
答案 0 :(得分:3)
超负荷是对的。大多数SQL开发人员使用存储整数的辅助表(以及存储日期的辅助表)。这一点在Joe Celko" SQL for Smarties"的完整章节中进行了概述。
示例:
CREATE TABLE numeri ( numero INTEGER PRIMARY KEY )
DECLARE @x INTEGER
SET @x = 0
WHILE @x < 1000
BEGIN
INSERT INTO numeri ( numero ) VALUES ( @x )
SET @x = @x + 1
END
SELECT
numero AS id,
foo
FROM
numeri
LEFT OUTER JOIN my_table
ON my_table.id = numero
WHERE
numero BETWEEN 0 AND 3
答案 1 :(得分:-1)
编程最小代码高性能的主要目标不需要这个东西只是从子句
中删除id 3答案 2 :(得分:-1)
如何说:
SELECT id,foo 从表 WHERE id&gt; = 0 AND&lt; = 3