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! ...
我认为您可以使用 join
和 group 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
假设我有这个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! ... |
我认为您可以使用 join
和 group 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