gpt4 book ai didi

sql - Postgres : Joining twice on a table

转载 作者:行者123 更新时间:2023-11-29 12:45:28 24 4
gpt4 key购买 nike

我(承认 SQL noob)在 Postgresql 中有三个表,如下所示:

群组

id |  name  | cat_id 
----+--------+--------
1 | group1 | 1
3 | group3 | 1
2 | group2 | 2
4 | group4 | 2

类别

id | name 
----+------
1 | cat1
2 | cat2

翻译

 id | source |  value  |   type   | res_id 
----+--------+---------+----------+--------
1 | group1 | Gruppe1 | groups | 1
2 | group2 | Gruppe2 | groups | 2
3 | group3 | Gruppe3 | groups | 3
4 | group4 | Gruppe4 | groups | 4
5 | cat1 | Kat1 | category | 1
6 | cat2 | Kat2 | category | 2

转换表对应用程序是全局的,并使用“res_id”和“type”字段引用其他表。因此,要获得“group1”的翻译,我需要使用“where res_id = 1 and type = 'groups'。

我需要按以下格式列出组:

类别 |集团|翻译类别 |翻译组

这个查询让我快到了:

select category.name, groups.name, translation.value from groups                                                                                                              
join category on groups.cat_id = category.id
join translation on groups.id = translation.res_id
where type = 'groups';

但是我当然缺少翻译的类别,并且不知道如何获得它。

最佳答案

我想你想要这样的东西:

select
category.name,
groups.name,
tg.value AS translated_group,
tc.value AS translated_category
from groups
inner join translation tg on (groups.id = tg.res_id AND tg.type = "groups")
inner join category on groups.cat_id = category.id
inner join translation tc on (category.id = tc.res_id AND tc.type = "category");

即加入 translation 两次,为每个副本取别名,并使用也过滤 type 字段的连接条件。

未经测试,因为问题中没有 CREATE TABLEINSERT 表单示例数据。

这些都不是 PostgreSQL 特有的,它们都是标准的 SQL。

顺便说一句,如果您不将表名混合使用复数形式和单数形式会更好。

关于sql - Postgres : Joining twice on a table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25290764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com