gpt4 book ai didi

mysql - SQL 连接根据条件返回所有行(在一个表或两个表中)

转载 作者:行者123 更新时间:2023-11-29 21:10:14 24 4
gpt4 key购买 nike

我有一个表格,其中有一列对内容进行分类:

id  lang   string
1 EN text1_en
1 DE text1_de
1 FR text1_fr
2 EN text2_en
2 DE text2_de
3 DE text3_de
3 FR text3_fr

我想获得这样的结果:

id  lang  string     id  lang  string    id  lang  string
1 EN text1_en 1 DE text1_de 1 FR text1_fr
2 EN text2_en 2 DE text2_de NULL NULL NULL
NULL NULL NULL 3 DE text3_de 3 FR text3_fr

我首先尝试加入:

select 
c1.id,c1.lang,c1.string,
c2.id,c2.lang,c2.string,
c3.id,c3.lang,c3.string
from
mytable c1
left join mytable c2 on (c1.id=c2.id and c2.lang='DE')
left join mytable c3 on (c1.id=c3.id and c3.lang='FR')
where
c1.lang='EN'
order by c1.id

但是我只得到 id 1 和 2 的结果。

如果我将 c1.lang='EN' 移至 on 条件,我将获得前 3 列的所有表格行(不仅是 lang ='EN')

最佳答案

您可以在 mysql 以外的服务器中使用完全外连接。对于大型表,此查询将花费一些时间。

  select 
c1.id,c1.lang,c1.string,
c2.id,c2.lang,c2.string,
c3.id,c3.lang,c3.string
from
mytable c1 left join mytable c2 on (c1.id=c2.id and c2.lang='DE')
left join mytable c3 on (c1.id=c3.id and c3.lang='FR')
where
c1.lang='EN'

UNION ALL

select
c1.id,c1.lang,c1.string,
c2.id,c2.lang,c2.string,
c3.id,c3.lang,c3.string
from
mytable c2 left join mytable c1 on (c2.id=c1.id and c1.lang='EN')
left join mytable c3 on (c2.id=c3.id and c3.lang='FR')
where
c2.lang='DE'

UNION ALL
select
c1.id,c1.lang,c1.string,
c2.id,c2.lang,c2.string,
c3.id,c3.lang,c3.string
from
mytable c3 left join mytable c1 on (c3.id=c1.id and c1.lang='EN')
left join mytable c2 on (c3.id=c2.id and c2.lang='DE')
where
c3.lang='FR'

关于mysql - SQL 连接根据条件返回所有行(在一个表或两个表中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36446752/

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