2016-10-04 31 views
2

我試圖根據它們的列和WHERE IN子句加入兩個表。如果在SQL的WHERE CLAUSE中找不到某個值,則顯示NULL

SELECT DISTINCT 
    t1.document_num, t2.file_name 
FROM 
    infocard_1 AS t1 
INNER JOIN 
    web_pub_subfile AS t2 on t1.info_card_id = t2.info_card_id 
WHERE 
    lower(t1.vault_name) LIKE N'%su-spec-release%' AND 
    t2.file_name = 
     CASE 
      WHEN t2.file_name IN ('00350.dwg', '00924.dwg', '00960.dwg', '00973.dwg') 
      THEN t2.file_name 
      ELSE NULL 
     END 

我得到的輸出以這種格式

document_num file_name 
------------------------- 
SU-SH3A081  00960.DWG 
SU-SH3A148  00973.DWG 

但我想獲得

document_num file_name 
------------------------- 
null   00350.dwg 
null   00924.dwg 
SU-SH3A081  00960.DWG 
SU-SH3A148  00973.DWG 

有沒有什麼辦法可以做到這一點?請幫幫我。

+3

試試'FROM web_pub_subfile AS t1 LEFT JOIN infocard_1 AS t2' –

+0

即使你已經得到了你的答案,你必須研究一下關於sql – Ashu

回答

1

試試這個:

SELECT distinct t1.document_num,t2.file_name 
FROM web_pub_subfile AS t2 
LEFT JOIN infocard_1 AS t1 on t1.info_card_id = t2.info_card_id AND 
           lower(t1.vault_name) LIKE N'%su-spec-release%' 
WHERE t2.file_name IN ('00350.dwg','00924.dwg','00960.dwg','00973.dwg') 
+1

的加入完美答案。謝謝兄弟... –

2

你需要的是RIGHT JOIN而不是INNER JOIN。詳細瞭解JOINShere的類型。

0

爲什麼你有一個WHERE表達CASE?這使得它很難閱讀。必要時使用ANDOR和括號來構建您的WHERE子句。你子句的語句:

WHERE lower(t1.vault_name) LIKE N'%su-spec-release%' 
AND t2.file_name IN ('00350.dwg','00924.dwg','00960.dwg','00973.dwg') 

要想從表中的記錄,即使他們沒有在其他表中的比賽,你會外加入其他表。

SELECT DISTINCT ic.document_num, wps.file_name 
FROM web_pub_subfile wps 
LEFT JOIN infocard_1 ic ON ic.info_card_id = wps.info_card_id 
         AND lower(ic.vault_name) LIKE N'%su-spec-release%' 
WHERE wps.file_name IN ('00350.dwg','00924.dwg','00960.dwg','00973.dwg'); 

我用一些可讀的替換你的別名。

+0

好吧,似乎我有點慢:-) –

+0

沒有probs兄弟。非常感謝您的支持......我會在ALIASES上採納您的建議 –

+0

任何想法爲什麼我會得到重複? –