SQL 服务器加入表
SQL Server join on to tables
请帮我解决以下问题:
SQL 服务器 2012 数据库
Table 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 |
*******************************
Table 2 (T2)
***************
| pk_Id | col1|
***************
| 1 |5285 |
***************
| 2 |6621 |
***************
Table 3 (T3)
************************
| pk_Id | col1 | fk_t2 |
************************
| 1 | text1| 1 |
************************
| 2 | text2| 1 |
************************
| 3 | text1| 2 |
************************
我需要什么:
T2.Col1 T3.Col1 T1.Text
如您所见,T2 与 T3 相关,并且 T2 和 T3 都与 T1 相关。
在 T1 中,列文本是两个表(t2 和 t3)的存储值,当文本列是 t2 的值时,fk_t3 为空(我知道设计不好),当文本列是 t3 的值时fk_t2 为空。
我知道那行不通:
(returns 没有)
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
returns 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
非常感谢!
使用 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
请帮我解决以下问题:
SQL 服务器 2012 数据库
Table 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 |
*******************************
Table 2 (T2)
***************
| pk_Id | col1|
***************
| 1 |5285 |
***************
| 2 |6621 |
***************
Table 3 (T3)
************************
| pk_Id | col1 | fk_t2 |
************************
| 1 | text1| 1 |
************************
| 2 | text2| 1 |
************************
| 3 | text1| 2 |
************************
我需要什么: T2.Col1 T3.Col1 T1.Text
如您所见,T2 与 T3 相关,并且 T2 和 T3 都与 T1 相关。 在 T1 中,列文本是两个表(t2 和 t3)的存储值,当文本列是 t2 的值时,fk_t3 为空(我知道设计不好),当文本列是 t3 的值时fk_t2 为空。
我知道那行不通: (returns 没有)
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
returns 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
非常感谢!
使用 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