我被存在和不存在的關鍵字卡住。如果b條件不存在,則使用條件a進行Oracle SQL選擇
我有一個表(Oracle門戶表),其中有總結,以下結構:
ID LANGUAGE CAPTION
1 NL DUTCH CAPTION
1 F FRENCH CAPTION
2 NL DUTCH CAPTION
3 F FRENCH CAPTION
我需要一個選擇總是選擇每個ID兩行,即使A F行或NL行不存在。然後,該行應在列的語言不存在的語言,但與現有行的標題(用語言F)
進行選擇,以便查詢的輸出應該是:
ID LANGUAGE CAPTION
1 NL DUTCH CAPTION
1 F FRENCH CAPTION
2 NL DUTCH CAPTION
2 F DUTCH CAPTION
3 F FRENCH CAPTION
3 NL FRENCH CAPTION
這是可能?
非常好奇, ,已經是一個很大的感謝!
ps:我有這樣的東西,但它完全不是我想要的。
SELECT id, language, display_name
FROM portal.wwsbr_all_folders p
WHERE caid = 55
AND DISPLAY_IN_PARENT_FOLDER = 1
AND ((upper(language) = 'NL' AND not exists (SELECT * FROM portal.wwsbr_all_folders p2 WHERE p.id = p2.id and language IN ('F')))
OR
(upper(language) = 'F' AND not exists (SELECT * FROM portal.wwsbr_all_folders p2 WHERE p.id = p2.id and language IN ('NL')))
)
AND parent_id = 4030963
ORDER BY sub_folder_sequence
編輯: 我得到正確的結果用下面的查詢現在
(SELECT id, CASE language WHEN 'nl' THEN 'f' ELSE 'f' END lang, display_name
FROM portal.wwsbr_all_folders p
WHERE caid = 55
AND DISPLAY_IN_PARENT_FOLDER = 1
AND ((language = 'f' and exists(SELECT * FROM portal.wwsbr_all_folders p2 WHERE p2.id = p.id AND language = 'f'))
OR (language = 'nl' and not exists(SELECT * FROM portal.wwsbr_all_folders p2 WHERE p2.id = p.id AND language = 'f')))
AND parent_id = 4656102)
UNION ALL
(
SELECT id, CASE language WHEN 'f' THEN 'nl' ELSE 'nl' END lang, display_name
FROM portal.wwsbr_all_folders p
WHERE caid = 55
AND DISPLAY_IN_PARENT_FOLDER = 1
AND ((language = 'nl' and exists(SELECT * FROM portal.wwsbr_all_folders p2 WHERE p2.id = p.id AND language = 'nl'))
OR (language = 'f' and not exists(SELECT * FROM portal.wwsbr_all_folders p2 WHERE p2.id = p.id AND language = 'nl')))
AND parent_id = 4656102)
感謝您的回答,我剛剛發現了另一個解決方案,它也會返回正確的結果。我不知道哪一個更好(優化器和負載)...看看我在'問題'編輯 – Verthosa
@Verthosa我認爲我的解決方案更快,你有更多的子查詢。 –
tnx很多人! – Verthosa