我目前正在尝试执行一个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)
这可能吗?我不认为空的回复算作"空",所以我有点麻烦.
您可以在一个语句中执行此操作,假设列相同:
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)
您可以使用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,因此,只有第一部分返回数据。