Запрос с разными условиями в одной таблице с одинаковыми столбцами - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть эта таблица (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

Ответы [ 5 ]

0 голосов
/ 11 декабря 2018

попробуйте

 SELECT concat('url_',language_code ,':  ',url) As url
 FROM url_table
 WHERE id = 60 AND (language_code = 'de' OR language_code = 'en');

на выходе:

enter image description here

0 голосов
/ 11 декабря 2018

Я думаю, что вы хотите агрегации или объединения:

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')

Это будет работать для произвольного числа id с, если вы используете group by:

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.

0 голосов
/ 11 декабря 2018

Вы можете использовать OR

SELECT url FROM url_table WHERE id = 60 AND language_code = 'de' OR language_code = 'en' ;
0 голосов
/ 11 декабря 2018

Не уверен, что синтаксис идеален, но может быть что-то вроде этого.

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
0 голосов
/ 11 декабря 2018

Вы можете попробовать использовать 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                    |

Посмотреть на БД Fiddle

...