2016-05-15 3 views
0

Пожалуйста, помогите мне со следующей проблемой:SQL Server присоединиться к таблицам

SQL Server 2012 базы данных

Таблица 1 (T1)

******************************* 
| pk_Id | text | fk_t2 | fk_t3| 
******************************* 
| 1 |text1 | 1 | null| 
******************************* 
| 2 |text2 | 2 | null| 
******************************* 
| 3 |text3 | null | 1 | 
******************************* 
| 4 |text1 | null | 2 | 
******************************* 

Таблица 2 (T2)

*************** 
| pk_Id | col1| 
*************** 
| 1 |5285 | 
*************** 
| 2 |6621 | 
***************  

Таблица 3 (T3)

************************ 
| pk_Id | col1 | fk_t2 | 
************************ 
| 1 | text1| 1 | 
************************ 
| 2 | text2| 1 | 
************************ 
| 3 | text1| 2 | 
************************ 

Что мне нужно: T2.Col1 T3.Col1 T1.Text

Как вы видите, Т2 связан с Т3, и оба, Т2 и Т3 связанных с T1. в T1, текст столбца являются хранимыми значениями для обеих таблиц (t2 и t3), когда в текстовом столбце указано значение t2, fk_t3 имеет значение null (я знаю плохой дизайн), а когда в текстовом столбце значение t3, fk_t2 является ноль.

Я знаю, что не работает: (возвращает Nothing)

select t2.col1, t3.col1, t1.text 
from t2 
inner join t1 on t2.pk=t1.fk_t2 
inner join t2 on t3.pl=t1.fk_t3 

возвращает нуль в t3.col1

select t2.col1, t3.col1, t1.text    
from t2 
left join t1 on t2.pk = t1.fk_t2 
left join t3 on t3.pl = t1.fk_t3 

Большое спасибо!

ответ

0

Используйте left join

select t1.text, 
     t2.col1, 
     t3.col1   
from t1 
left join t2 on t2.pk = t1.fk_t2 
left join t3 on t3.pl = t1.fk_t3 or t3.fk_t2 = t2.pk_Id 
+0

спасибо! ваше решение (coalesce) не возвращает t3.col1, просто смешайте его с тегом t2.col1. Мне нужно иметь t2.col1 и t3.col1 на разных столбцах. Маби, я не понимаю :). Мне нужно t1.text, t2.col1, t3.col1 в обратном – gligom

+0

Тогда просто сделайте это. Я обновил ответ. Но один из них будет нулевым в соответствии с вашим вопросом, и я думал, что вы хотите просто ненулевое значение - независимо от того, из какой таблицы. Но обновленный запрос разделяет столбцы. –

+0

Это было первое, что я сделал. t3.col1 все null в результате :) – gligom

Смежные вопросы