如果数据存在,否则......使用Oracle SQL?

时间:2011-09-06 14:20:45

标签: sql oracle

我目前有两个查询,返回相同的数据,如果第一个没有返回结果,我希望第二个查询运行,这是我现在PHP的基本思路:

Run Query1
If Query1 returns a result
    Enter data into array
Else 
    Run Query2
    Enter data into array

我想知道的是,我可以独家使用Oracle SQL吗?所以它只是对数据库运行一个查询,快速检查第一个语句,如果没有找到结果则运行第二个语句?

由于

4 个答案:

答案 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语句 - 这是一个应该做你需要的样本......

http://www.techonthenet.com/oracle/loops/if_then.php

答案 3 :(得分:1)

第二个查询是否可以运行,即使第一个查询返回结果?

如果是,那么UNION会这样做。

如果没有,那么我认为UNION仍然是正确的答案,只需编写第二个查询WHERE clasue来限制第一个查询记录何时存在。