简体   繁体   English

如何在SQLIte3上通过一个查询联接多个

[英]How to join multiple with one query on SQLIte3

Here are my case: 这是我的情况:

  1. Table A: ID integer, Kind integer, 表A:ID整数,种类整数,

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

  1. Table B: ID, name, price 表B:ID,名称,价格
  2. Table C: ID, item, amount 表C:ID,项目,金额

Table A 表A

  • ID | ID | Kind
  • 1 | 1 | 1 1
  • 2 | 2 | 1 1
  • 2 | 2 | 2 2
  • 3 | 3 | 2 2

TABLE B 表B

  • ID name price 身份证名称价格
  • 1 name1 2.0 1个名称1 2.0
  • 2 name2 1.0 2名称2 1.0

TABLE C 表C

  • ID Item amount ID项目数量
  • 2 item2 1.0 2项目2 1.0
  • 3 item3 1.0 3项目3 1.0

what I am trying to search with one query and the result like: 我正在尝试使用一个查询进行搜索,结果如下:

- 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

Is it possible? 可能吗?

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

Just join with both tables, and make the Kind value part of the join condition. 只需使用两个表进行Kind ,并使Kind值成为联接条件的一部分。 Use outer joins to get TableA rows even when no match is found for one join: 即使找不到一个联接 ,也可以使用外部联接来获取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;

Alternatively, use normal joins in two separate queries, and combine them with lots of NULL columns: 或者,在两个单独的查询中使用普通联接, 并将它们与许多NULL列组合:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM