Я пытался объединить две таблицы на основе их столбцов и предложения WHERE IN.

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

Есть ли способ добиться этого? Пожалуйста, помогите мне.

2
Vishwanath jawalkar 4 Окт 2016 в 16:21

3 ответа

Лучший ответ

Попробуй это:

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
Jaydip Jadhav 4 Окт 2016 в 13:29

Почему у вас есть выражение CASE в WHERE? Из-за этого его очень трудно читать. При необходимости используйте AND или OR и круглые скобки для построения вашего предложения 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
Thorsten Kettner 4 Окт 2016 в 13:36

Вам нужен RIGHT JOIN вместо INNER JOIN. Подробнее о типах JOINS см. Здесь.

2
S.Karras 4 Окт 2016 в 13:23