2017-02-07 12 views
5

Tôi hiện đang cố gắng thực hiện truy vấn SQL có thể phát hiện nếu truy vấn SELECT không trả về gì, và sau đó thực hiện một truy vấn khác nếu trường hợp đó xảy ra.SQL - Nếu chọn trả về không có gì thì hãy chọn khác

Dưới đây là những gì tôi có nghĩa là:

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

Đây có phải là có thể? Tôi không nghĩ rằng một câu trả lời trống rỗng được tính là "không" vì vậy tôi có một chút rắc rối với điều đó.

+4

Bạn đang sử dụng cơ sở dữ liệu cụ thể nào? –

+0

Tôi đang sử dụng Postgresql. Các giải pháp dưới đây đã làm việc với nó. –

Trả lời

6

Bạn có thể làm điều này trong một tuyên bố, giả định các cột đều giống nhau:

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

Cảm ơn Gordon, điều này thực sự hiệu quả. Bạn là con thú. :) –

3

Bạn có thể sử dụng 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; 

Đây NOT EXISTS đảm bảo rằng một trong hai phần của UNION ALL được trả về . Nếu số thứ hai criteria = criteria vượt qua, thì NOT EXISTS sẽ trả về false và do đó, chỉ phần thứ hai của truy vấn trên trả về kết quả. Nếu không, có nghĩa là, không có hàng nào có criteria = criteria và NOT EXISTS sẽ trả về true và do đó, chỉ có dữ liệu trả về phần đầu tiên.

+0

Cảm ơn lời giải thích, Gurwinder. :) Làm cho nó dễ hiểu hơn. –

Các vấn đề liên quan