我目前有两个查询,返回相同的数据,如果第一个没有返回结果,我希望第二个查询运行,这是我现在PHP的基本思路:
Run Query1
If Query1 returns a result
Enter data into array
Else
Run Query2
Enter data into array
我想知道的是,我可以独家使用Oracle SQL吗?所以它只是对数据库运行一个查询,快速检查第一个语句,如果没有找到结果则运行第二个语句?
由于
答案 0 :(得分:3)
QUERY1
UNION ALL
QUERY2
WHERE NOT EXISTS (QUERY1)
e.g:
SELECT id
FROM products
UNION ALL
SELECT id
FROM old_products
WHERE NOT EXISTS (SELECT id FROM products)
查询:
SELECT *
FROM Table
WHERE ID = 7
AND Flag = 1
UNION ALL
SELECT *
FROM Table
WHERE ID = 7
AND NOT EXISTS (select * from Table where ID = 7 and Flag = 1)
要识别唯一的行,您也可以尝试:
WITH qry AS
(
SELECT a.* ,
ROW_NUMBER() OVER(PARTITION BY id ORDER BY Flag DESC ) rn
FROM Table a
WHERE ID = 7 -- THIS CAN BE PARAMETERIZED
)
SELECT *
FROM qry
WHERE rn = 1
答案 1 :(得分:2)
您可以将第二个查询和关联的逻辑放入“no_data_found”异常时。例如:
begin
Query 1
do stuff
exception when no_data_found then
query 2
do stuff
end;
希望这有帮助。
答案 2 :(得分:2)
PLSQL(Oracle的sql风格)可以做IF-THEN-ELSE语句 - 这是一个应该做你需要的样本......
答案 3 :(得分:1)
第二个查询是否可以运行,即使第一个查询返回结果?
如果是,那么UNION
会这样做。
如果没有,那么我认为UNION仍然是正确的答案,只需编写第二个查询WHERE clasue来限制第一个查询记录何时存在。