比如我有三张表 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

解决方案 »

  1.   


    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
      

  2.   

    SELECT a.id,a.name,b.NAME as BNAME,c.name as BNAME
    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