SQL - 如果Select返回任何内容,则执行另一个选择

时间:2017-02-07 12:20:42

标签: sql postgresql

我目前正在尝试执行一个SQL查询,该查询可以检测SELECT查询是否返回任何内容,然后再执行另一个查询,如果是这种情况。

这就是我的意思:

IF SELECT * FROM table WHERE criteria = criteria RETURNS NO ROWS
THEN SELECT * FROM table WHERE criteria2 = criteria2

这可能吗?我不认为空回复计为" null"所以我有点麻烦。

2 个答案:

答案 0 :(得分:6)

您可以在一个语句中执行此操作,假设列相同:

SELECT *
FROM table
WHERE criteria = criteria 
UNION ALL
SELECT *
FROM table
WHERE criteria2 = criteria2 AND
      NOT EXISTS (SELECT 1 FROM table WHERE criteria = criteria);

答案 1 :(得分:3)

您可以使用NOT EXISTS

SELECT * FROM table WHERE criteria2 = criteria2
and not exists (
    SELECT * FROM table WHERE criteria = criteria
)
union all
SELECT * FROM table WHERE criteria = criteria;

此处NOT EXISTS确保返回UNION ALL的任一部分。如果第二个criteria = criteria通过,则NOT EXISTS将返回false,因此,只有上述查询的第二部分返回结果。如果没有,则表示没有criteria = criteria的行,NOT EXISTS将返回true,因此只有第一部分返回数据。