如果查询没有返回MySQL,请尝试第二次查询

时间:2016-09-16 16:53:49

标签: mysql

我越过我拥有的一切,这是可能的......

我目前有一些使用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
)

这可能吗?如果是这样,那么一个有效的例子是什么?

1 个答案:

答案 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的查询)。