【问题标题】:How to join multiple with one query on SQLIte3如何在 SQLIte3 上通过一个查询连接多个
【发布时间】:2018-08-07 19:14:09
【问题描述】:

这是我的情况:

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

(Kind=1 搜索表 B,Kind=2,搜索表 C)

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

表 A

  • ID |种类
  • 1 | 1
  • 2 | 1
  • 2 | 2
  • 3 | 2

表 B

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

表 C

  • ID 物品数量
  • 2 项 2 1.0
  • 3 项 3 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

【问题讨论】:

  • 我不明白预期的输出。您是否尝试过查询?
  • 谢谢,我编辑了我的帖子以添加我想要做的事情
  • 为什么第三行没有名字? ID 和 Kind 都有一个 2 的值,所以我希望有一个名字。
  • 第三行名称和价格将为NULL,因为结合ID和Kind指向表C。实际上,我要做的是左连接B,然后左连接C与表A , 表 A 有表 B 和表 C 的组合。

标签: sql join sqlite


【解决方案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;

或者,在两个单独的查询中使用普通连接,combine 使用大量 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;

【讨论】:

  • 很好的答案,谢谢 CL,
猜你喜欢
  • 2011-08-28
  • 2017-01-27
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多