我越过我拥有的一切,这是可能的......
我目前有一些使用UNION ALL的SQL将一堆查询连接在一起。 ALL在那里很重要,因为这些查询可能会返回相同的记录,我需要每个实例。
不幸的是,单个SELECT没有经过深思熟虑。它们包含一个WHERE子句,它返回值与用户输入值匹配的所有记录,或者为NULL,我现在需要这些只返回匹配的记录,或者只返回返回NULL的记录第一次尝试没有任何回报......
换句话说,我有类似的东西......
SELECT foo,bar
FROM foobar
WHERE foo = bar
OR foo IS NULL
UNION ALL
SELECT foo,bar
FROM foobar
WHERE foo = bar
OR foo IS NULL
而我需要这样的东西......
(
TRY..
SELECT foo,bar
FROM foobar
WHERE foo = bar
..nothing? TRY..
SELECT foo,bar
FROM foobar
WHERE foo IS NULL
)
UNION ALL
(
TRY..
SELECT foo,bar
FROM foobar
WHERE foo = bar
..nothing? TRY..
SELECT foo,bar
FROM foobar
WHERE foo IS NULL
)
这可能吗?如果是这样,那么一个有效的例子是什么?
答案 0 :(得分:0)
对于每个查询组,您可以使用
之类的结构...
UNION ALL
SELECT foo,bar
FROM foobar
WHERE foo = bar
or foo is null and not exists (
SELECT *
FROM foobar
WHERE foo = bar
)
UNION ALL
...
这将采用满足您条件的行,或者,如果没有符合您条件的行,则为null
。它可以使用foo
上的索引。它会比您当前的查询慢一点(因为它必须两次评估foo = bar
的查询)。