【问题标题】:One-to-Many for multiple tables SQL SELECT into single row多表的一对多 SQL SELECT 到单行
【发布时间】:2020-12-03 02:28:57
【问题描述】:

我有一个场景,其中 3 个表。 Table1 与 Table2 具有一对多的关系。 表 2 与表 3 具有一对多的关系。 在 where 子句中我使用 Description_key = UYTR 所以我想连续获得结果集。有什么办法吗?有人可以推荐我吗?

Table1
Id District Description_key
1  ABC      UYTR
2  DEF      UYTR
3  GHI      UYTR
4  IJK      UYTR
Table2
Id Taluk Table1_ID_FK
1  UUU   1
2  III   1
3  OOO   1
4  PPP   2
5  TTT   2
6  QQQ   3
Table3
ID  Hobli  Table2_ID_FK
1   Bhuh   1
2   tyty   1
3   tyty   1
4   PPPP   2
5   JHGF   2

【问题讨论】:

  • 请向我们展示您想要的结果。另外,到目前为止,您尝试了什么,您在哪里卡住了?
  • 我不知道如何实现 3 个表。但我想看到输出一行。 table1.id | table1.区 | table2.taluk| table3.id | table3.hobli |

标签: postgresql postgresql-9.3


【解决方案1】:

你想要一个简单的JOIN 外键吗?

demo:db<>fiddle

SELECT
    *
FROM table1 t1
JOIN table2 t2 ON t1.Id = t2.Table1_ID_FK
JOIN table3 t3 ON t2.Id = t3.Table2_ID_FK

简单的JOIN删除记录,如果不存在相关的JOIN记录:

Id | District | Description_key | Id | Taluk | Table1_ID_FK | ID | Hobli | Table2_ID_FK
-: | :------- | :-------------- | -: | :---- | -----------: | -: | :---- | -----------:
1 | ABC      | UYTR            |  1 | UUU   |            1 |  1 | Bhuh  |            1
1 | ABC      | UYTR            |  1 | UUU   |            1 |  2 | tyty  |            1
1 | ABC      | UYTR            |  1 | UUU   |            1 |  3 | tyty  |            1
1 | ABC      | UYTR            |  2 | III   |            1 |  4 | PPPP  |            2
1 | ABC      | UYTR            |  2 | III   |            1 |  5 | JHGF  |            2

LEFT JOIN 保留其他记录:

SELECT
    *
FROM table1 t1
LEFT JOIN table2 t2 ON t1.Id = t2.Table1_ID_FK
LEFT JOIN table3 t3 ON t2.Id = t3.Table2_ID_FK

结果:

Id | District | Description_key |   Id | Taluk | Table1_ID_FK |   ID | Hobli | Table2_ID_FK
-: | :------- | :-------------- | ---: | :---- | -----------: | ---: | :---- | -----------:
 1 | ABC      | UYTR            |    1 | UUU   |            1 |    1 | Bhuh  |            1
 1 | ABC      | UYTR            |    1 | UUU   |            1 |    2 | tyty  |            1
 1 | ABC      | UYTR            |    1 | UUU   |            1 |    3 | tyty  |            1
 1 | ABC      | UYTR            |    2 | III   |            1 |    4 | PPPP  |            2
 1 | ABC      | UYTR            |    2 | III   |            1 |    5 | JHGF  |            2
 1 | ABC      | UYTR            |    3 | OOO   |            1 |  null|  null |         null
 2 | DEF      | UYTR            |    4 | PPP   |            2 |  null|  null |         null
 2 | DEF      | UYTR            |    5 | TTT   |            2 |  null|  null |         null
 3 | GHI      | UYTR            |    6 | QQQ   |            3 |  null|  null |         null
 4 | IJK      | UYTR            |  null| null  |          null|  null|  null |         null

【讨论】:

  • 你能告诉我这个结果如何吗?假设 table1 有 3(id1, id2, id3) 记录,table2 有 4(t21, t22,t23,t24) 记录(id1 有 3 条,id2 有 1 条),table3 有 3 条记录。 Table3 记录属于 t21 。结果如何
  • 我添加了输出和小提琴,您可以在其中进行测试。如果它不适合您的示例,请将真实示例和预期输出(正如我在答案中所做的那样)添加到问题中!也许你可以修改小提琴以适应你想要的
  • stackoverflow.com/questions/10973365/… 这对我有帮助。谢谢。
猜你喜欢
  • 2012-07-11
  • 2020-11-23
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多