比如我有三张表 tableA, tableB, tableC,表A里面的BUID,CUID字段分别为表B,C的外键
(由于不能截图,大家包涵)
tableA如下:
--------------------------
| ID | NAME | BUID | CUID|
--------------------------
| 1 | HHH | 2 | 1 |
--------------------------
tableB如下:
---------------
| ID | NAME |
-------------
| 2 | BB |
---------------
tableC如下:
---------------
| ID | NAME |
-------------
| 1 | CC |
---------------
我想得到如下的结果:
-----------------------------
| ID | NAME | BNAME | CNAME |
-----------------------------
| 1 | HHH | BB | CC |
-----------------------------
如果tableA的CUID字段在tableC中没有对应的结果如下显示
-----------------------------
| ID | NAME | BNAME | CNAME |
-----------------------------
| 1 | HHH | BB | NULL |
-----------------------------
如果tableA的BUID字段在tableB中没有对应的结果如下显示
-----------------------------
| ID | NAME | BNAME | CNAME |
-----------------------------
| 1 | HHH | NULL | CC |
-----------------------------
请问怎么写sql语句,不想分多次执行,希望一条sql语句得到我想要的结果。(数据库用的firebird,其他也行。)sql firebird
(由于不能截图,大家包涵)
tableA如下:
--------------------------
| ID | NAME | BUID | CUID|
--------------------------
| 1 | HHH | 2 | 1 |
--------------------------
tableB如下:
---------------
| ID | NAME |
-------------
| 2 | BB |
---------------
tableC如下:
---------------
| ID | NAME |
-------------
| 1 | CC |
---------------
我想得到如下的结果:
-----------------------------
| ID | NAME | BNAME | CNAME |
-----------------------------
| 1 | HHH | BB | CC |
-----------------------------
如果tableA的CUID字段在tableC中没有对应的结果如下显示
-----------------------------
| ID | NAME | BNAME | CNAME |
-----------------------------
| 1 | HHH | BB | NULL |
-----------------------------
如果tableA的BUID字段在tableB中没有对应的结果如下显示
-----------------------------
| ID | NAME | BNAME | CNAME |
-----------------------------
| 1 | HHH | NULL | CC |
-----------------------------
请问怎么写sql语句,不想分多次执行,希望一条sql语句得到我想要的结果。(数据库用的firebird,其他也行。)sql firebird
SELECT a.id,a.name,b.NAME,c.name
FROM tablea a LEFT JOIN tableb b ON a.buid=b.ID
LEFT JOIN tablec c ON a.cuid=c.id
FROM tableA a
LEFT JOIN tableB b ON a.buid=b.ID
LEFT JOIN tableC c ON a.cuid=c.id或者SELECT a.id,a.name
,BNAME=(select top 1 name from tableB b where a.buid=b.ID)
,CNAME=(select top 1 name from tableC c where a.cuid=c.ID)
FROM tablea a