简体   繁体   English

mysql中的两排对一排

[英]Two rows to one row in mysql

Lets say i have this table可以说我有这张桌子

name姓名 lang message信息
welcome欢迎 en zh Welcome, {user}....欢迎,{用户}....
welcome欢迎 ko KoreanMessage1韩语留言1
error错误 en zh Error occurred.....发生了错误.....
error错误 ko KoreanMessage2韩语留言2

so i want to select this table like this:所以我想 select 这个表是这样的:

name姓名 ko en zh
welcome欢迎 KoreanMessage1韩语留言1 Welcome, {user}....欢迎,{用户}....
error错误 KoreanMessage2韩语留言2 Error occurred....发生了错误....

so how can i do this only with sql?那么我怎么能只用 sql 做到这一点? (i'm using mariadb) (我正在使用 mariadb)

i tried this我试过这个

(SELECT
a.name, a.value AS ko, b.value AS en
FROM messages AS a
LEFT JOIN messages AS b
ON a.name = b.name AND a.lang = 'ko' AND b.lang = 'en')
UNION
(SELECT
a.name, a.value AS ko, b.value AS en
FROM messages AS a
RIGHT JOIN messages AS b
ON a.name = b.name AND a.lang = 'ko' AND b.lang = 'en')
ORDER BY name ASC

(the table is "message") (表是“消息”)

and it didnt work.它没有用。 there was same columns twice.有两次相同的列。

oh and there might be some data that only in one language but i want to select that too with null on other language.哦,可能有一些数据只有一种语言,但我也想 select 和 null 使用其他语言。 for example like例如喜欢

name姓名 ko en zh
welcome欢迎 NULL NULL Welcome.欢迎。 ... ...

Kindly try this请试试这个

SELECT m.name,
       msg1.message en,
       msg2.message ko 
FROM messages m 
LEFT JOIN messages msg1 
    ON msg1.name = m.name 
    AND msg1.lang = 'en' 
LEFT JOIN messages msg2 
    ON msg2.name = m.name 
    AND msg2.lang = 'ko' 
GROUP BY m.name

I think you can use join and group by to get what you want.我认为你可以使用joingroup by来获得你想要的。

SELECT m.name, m_en.message en, m_ko.message ko
FROM messages m
INNER JOIN messages m_en ON m_en.name = m.name
INNER JOIN messages m_ko ON m_ko.name = m.name
WHERE m_en.lang = 'en'
AND m_ko.lang = 'ko'
GROUP BY m.name, en, ko

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

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