mysql 两行对一行

Two rows to one row in mysql

假设我有这个table

name lang message
welcome en Welcome, {user}!...
welcome ko KoreanMessage1
error en Error occurred!....
error ko KoreanMessage2

所以我想 select 这个 table 像这样:

name ko en
welcome KoreanMessage1 Welcome, {user}!...
error KoreanMessage2 Error occurred!...

那么我如何才能只使用 sql 来做到这一点? (我正在使用 mariadb)

我试过了

(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

(table 是“消息”)

它没有用。 有两次相同的列。

哦,可能有些数据只用一种语言,但我想 select 在其他语言上也用 null。 例如像

name ko en
welcome NULL Welcome! ...

我认为您可以使用 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

请试试这个

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