如何在SQLIte3上使用一个查询连接多个

时间:2018-02-28 01:20:09

标签: sql join sqlite

以下是我的案例:

  1. 表A:ID整数,种类整数,
  2.   

    (种类= 1搜索表B,种类= 2,搜索表C)

    1. 表B:ID,名称,价格
    2. 表C:ID,项目,金额
    3. 表A

      • ID |样
      • 1 | 1
      • 2 | 1
      • 2 | 2
      • 3 | 2

      表B

      • ID名称价格
      • 1 name1 2.0
      • 2 name2 1.0

      表C

      • ID项目金额
      • 2 item2 1.0
      • 3 item3 1.0

      我想用一个查询搜索的结果如下:

        

      - ID | Kind | name | price | item. | amount - 1 | 1 | name1 | 2.0 | ---- | ----- - 2 | 1 | name2 | 1.0 | ---- |. ----- - 2 | 2 | ---- | --- | item2 | 1.0 - 3 | 2 | ---- | --- | item3 | 1.0

      有可能吗?

      select A.ID,A.kind,B.name,B.price,C.item,C.amount from TableA 
      case when Kind=1 Left Join TableB on A.ID=B.ID Then Left Join TableC on A.ID=C.ID order by ID
      

1 个答案:

答案 0 :(得分:1)

只需加入两个表,并使Kind值成为连接条件的一部分。即使找不到一个连接的匹配项,也可以使用outer joins获取TableA行:

SELECT TableA.ID,
       TableA.Kind,
       TableB.name,
       TableB.price,
       TableC.item,
       TableC.amount
FROM TableA
LEFT JOIN TableB ON TableA.Kind = 1 AND TableA.ID = TableB.ID
LEFT JOIN TableC ON TableA.Kind = 2 AND TableA.ID = TableC.ID;

或者,在两个单独的查询中使用常规联接,并使用许多NULL列combine使用它们:

SELECT TableA.ID,
       TableA.Kind,
       TableB.name,
       TableB.price,
       NULL AS item,
       NULL AS amout
FROM TableA
JOIN TableB USING (ID)
WHERE Table.Kind = 1

UNION ALL

SELECT TableA.ID,
       TableA.Kind,
       NULL,
       NULL,
       TableC.item,
       TableC.amount
FROM TableA
JOIN TableC USING (ID)
WHERE Table.Kind = 2;