在具有相同列的相同 table 中以不同条件查询
Query with different conditions in same table with same columns
我有这个 table (url_table):
+----+---------------+-------------+
| id | language_code | url |
+----+---------------+-------------+
| 60 | de | german_url |
| 60 | en | english_url |
| 60 | fr | france_url |
| 60 | es | spanish_url |
+----+---------------+-------------+
我想将这两个查询合并为一个:
SELECT url FROM url_table WHERE id = 60 AND language_code = 'de';
SELECT url FROM url_table WHERE id = 60 AND language_code = 'en';
结果应为德语和英语 url,但重命名为 url_de 和 url_en:
url_de: german_url
url_en: english_url
你可以尝试使用in
SELECT url
FROM url_table
WHERE id = 60 AND language_code in ('de','en');
根据您的预期结果,您可以尝试使用 concat
函数。
查询#1
SELECT concat('url_',language_code ,':',url)
FROM url_table
WHERE id = 60 AND language_code in ('de','en');
| concat('url_',language_code ,':',url) |
| ------------------------------------- |
| url_de:german_url |
| url_en:english_url |
您可以使用OR
SELECT url FROM url_table WHERE id = 60 AND language_code = 'de' OR language_code = 'en' ;
不确定语法是否完美,但可能是这样的。
SELECT
u.id
, url_de = (SELECT URL FROM url_table u2 WHERE u2.ID = u.id AND u2.language_code ='de')
, url_en = (SELECT URL FROM url_table u2 WHERE u2.ID = u.id AND u2.language_code ='de')
FROM url_table u
WHERE u.id = 60
我想你想要聚合或连接:
SELECT MAX(CASE WHEN language_code = 'de' THEN url END) as url_de,
MAX(CASE WHEN language_code = 'en' THEN url END) as url_en
FROM url_table
WHERE id = 60 AND language_code IN ('de', 'en')
如果您使用 group by
:
,这将适用于任意数量的 id
s
SELECT id,
MAX(CASE WHEN language_code = 'de' THEN url END) as url_de,
MAX(CASE WHEN language_code = 'en' THEN url END) as url_en
FROM url_table
WHERE language_code IN ('de', 'en')
GROUP BY id;
您也可以使用自连接:
select de.url as url_de, en.url as url_en
from url_table de join
url_table en
on de.id = en.id and
de.language_code = 'de' and
en.language_code = 'en'
where de.id = 60;
但是,如果您没有两种语言的行,这会变得棘手,这就是我推荐 group by
方法的原因。
试试这个
SELECT concat('url_',language_code ,': ',url) As url
FROM url_table
WHERE id = 60 AND (language_code = 'de' OR language_code = 'en');
输出:
我有这个 table (url_table):
+----+---------------+-------------+
| id | language_code | url |
+----+---------------+-------------+
| 60 | de | german_url |
| 60 | en | english_url |
| 60 | fr | france_url |
| 60 | es | spanish_url |
+----+---------------+-------------+
我想将这两个查询合并为一个:
SELECT url FROM url_table WHERE id = 60 AND language_code = 'de';
SELECT url FROM url_table WHERE id = 60 AND language_code = 'en';
结果应为德语和英语 url,但重命名为 url_de 和 url_en:
url_de: german_url
url_en: english_url
你可以尝试使用in
SELECT url
FROM url_table
WHERE id = 60 AND language_code in ('de','en');
根据您的预期结果,您可以尝试使用 concat
函数。
查询#1
SELECT concat('url_',language_code ,':',url)
FROM url_table
WHERE id = 60 AND language_code in ('de','en');
| concat('url_',language_code ,':',url) |
| ------------------------------------- |
| url_de:german_url |
| url_en:english_url |
您可以使用OR
SELECT url FROM url_table WHERE id = 60 AND language_code = 'de' OR language_code = 'en' ;
不确定语法是否完美,但可能是这样的。
SELECT
u.id
, url_de = (SELECT URL FROM url_table u2 WHERE u2.ID = u.id AND u2.language_code ='de')
, url_en = (SELECT URL FROM url_table u2 WHERE u2.ID = u.id AND u2.language_code ='de')
FROM url_table u
WHERE u.id = 60
我想你想要聚合或连接:
SELECT MAX(CASE WHEN language_code = 'de' THEN url END) as url_de,
MAX(CASE WHEN language_code = 'en' THEN url END) as url_en
FROM url_table
WHERE id = 60 AND language_code IN ('de', 'en')
如果您使用 group by
:
id
s
SELECT id,
MAX(CASE WHEN language_code = 'de' THEN url END) as url_de,
MAX(CASE WHEN language_code = 'en' THEN url END) as url_en
FROM url_table
WHERE language_code IN ('de', 'en')
GROUP BY id;
您也可以使用自连接:
select de.url as url_de, en.url as url_en
from url_table de join
url_table en
on de.id = en.id and
de.language_code = 'de' and
en.language_code = 'en'
where de.id = 60;
但是,如果您没有两种语言的行,这会变得棘手,这就是我推荐 group by
方法的原因。
试试这个
SELECT concat('url_',language_code ,': ',url) As url
FROM url_table
WHERE id = 60 AND (language_code = 'de' OR language_code = 'en');
输出: