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

Pri*_*den 6 sql postgresql

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

这就是我的意思:

IF SELECT * FROM table WHERE criteria = criteria RETURNS NO ROWS
THEN SELECT * FROM table WHERE criteria2 = criteria2
Run Code Online (Sandbox Code Playgroud)

这可能吗?我不认为空的回复算作"空",所以我有点麻烦.

Gor*_*off 7

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

SELECT *
FROM table
WHERE criteria = criteria 
UNION ALL
SELECT *
FROM table
WHERE criteria2 = criteria2 AND
      NOT EXISTS (SELECT 1 FROM table WHERE criteria = criteria);
Run Code Online (Sandbox Code Playgroud)


Gur*_*ngh 5

您可以使用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;
Run Code Online (Sandbox Code Playgroud)

这里NOT EXISTS确保返回 UNION ALL 的任一部分。如果第二个criteria = criteria通过,NOT EXISTS则将返回 false,因此,只有上述查询的第二部分返回结果。如果不是,则意味着没有行,criteria = criteria并且 NOT EXISTS 将返回 true,因此,只有第一部分返回数据。