2015-05-09 32 views
-3

需要与获得来自多个表中的数据相同外键

  • 表1 InjID(PK)和Name
  • 表2 Tid(RefK)是指InjId(表1)和Name
  • 表3 ID(RefK)指的是InjID(表1)和Name

有表2和表之间没有联系3.

我有这样的数据:

表1

________________ 
InjID  Name 
---------------- 
1   xxxx 
2   bbbb 
3   cccc 
4   yyyy 

表2

-------------- 
TID  Name 
-------------- 
1  A3434 
1  R5678 
2  G6789 

和表3

------------- 
ID  Name 
------------- 
2  89T 
2  78P 
3  66J 

我想要的结果是这样的:

-------------------------- 
injid Table1-name Table2-name table3-name 
-------------------------------------------- 
1   xxxx  A3434  null 
1   xxxx  R5678  null 
2   bbbb  G6789  89T 
2   bbbb  null   78P 
3   cccc  null   66J 
4   yyyy  null   null 
+1

它是什么类型的SQL?即Oracle? SQL Server?您通常可以使用其中一个GUI创建一个视图,然后从中找出它。 –

+0

其Sql服务器,我想要一个正常的SQL查询来生成Microstrategy中的报告 – Ammu

+0

应该足以做'Table_1左外部连接表Table_2上Table_1.Name = Table_2.Name左外部连接...' –

回答

2

我猜你只是想要一个OUTER JOIN

select t1.injid, t1.name, t2.name, t3.name 
from table1 t1 
    left join table2 t2 on t1.InjID = t2.tid 
    left join table3 t3 on t1.InjID = t3.id 

执行,如:

SQL>select * from table1; 
     InjID name 
=========== ========== 
      1 xxxx 
      2 bbbb 
      3 cccc 
      4 yyyy 

        4 rows found 

SQL>select * from table2; 
     TID name 
=========== ========== 
      1 A3434 
      1 R5678 
      2 G6789 

        3 rows found 

SQL>select * from table3; 
     ID name 
=========== ========== 
      2 89T 
      2 78P 
      3 66J 

        3 rows found 

SQL>select t1.injid, t1.name, t2.name, t3.name 
SQL&from table1 t1 
SQL& left join table2 t2 on t1.InjID = t2.tid 
SQL& left join table3 t3 on t1.InjID = t3.id; 
     InjID name  name  name 
=========== ========== ========== ========== 
      1 xxxx  A3434  - 
      1 xxxx  R5678  - 
      2 bbbb  G6789  89T 
      2 bbbb  G6789  78P 
      3 cccc  -   66J 
      4 yyyy  -   - 

        6 rows found 

随着空。够好了?

+0

我不想得到笛卡尔产品。森林我使用相同,但我不寻找这个输出。请参阅上面的输出。 – Ammu

+0

如果我使用左连接表2和表3名称给笛卡尔产品。我想要nulls – Ammu

+0

你甚至试过我的答案?它给你空位! – jarlh

相关问题