select b.* from tableB b, tableA A
Where b.id = a.id
一個簡單連接就足夠了這一點。其他方式是使用EXISTS
。並把你的條件放在裏面。
select * from tableB b
Where exists
(Select 'x' from tableA a
Where a.id=b.id)
編輯:
希望你需要這個。
/* first part returns result only when tableA has data */
select b.* from tableB b, tableA A
Where b.id = a.id
Union
/* Now we explicitly check for presence of data in tableA,only
If not we query tableB */
Select * from tableB
Where not exists (select 'x' from tableA)
所以,只有一個查詢的一部分將返回結果是相同的結果集,UNION
設置操作,可以使這件事。
如果你想要基於條件的結果,PL/SQL可能是一個不錯的選擇!
VARIABLE MYCUR REFCURSOR;
/* defines a ref cursor in SQL*Plus */
DECLARE
V_CHECK NUMBER;
BEGIN
SELECT COUNT(*) INTO V_CHECK
FROM TABLEA;
IF(v_CHECK > 0) THEN
OPEN :MYCUR FOR
select b.* from tableB b, tableA A
Where b.id = a.id;
ELSIF
OPEN :MYCUR FOR
select * from tableB;
END IF;
END;
/
/* prints the cursor result in SQL*Plus*/
print :MYCUR
什麼?我不明白。它太模糊了。 – bumbumpaw
如果表A不是空的,你想怎麼做? –
糾正我,如果我的理解錯誤,你想 檢查表A是否有記錄,如果是,你會顯示記錄與表A和表B有關係嗎?如果沒有記錄?會發生什麼?它只會顯示錶B的所有記錄,否則它將不顯示任何內容?因爲如果您只想查找表A中是否存在與表B相關的記錄,只需使用加入即可獲得記錄。 – wrecklez