Мне трудно понять, как эффективно сделать то, что я описал в названии. Вопрос довольно сложный для формулировки, поэтому я просто приведу пример:
У меня есть 2 таблицы - одна представляет собой справочную таблицу для названий стран, а другая содержит количество стран. Проблема в том, что 2-я таблица выросла на ** **, и теперь в том же столбце есть и идентификаторы, и названия страны, например:
Table_1: countries
country_id | name
------------+------
0000 | Italy
0001 | France
0002 | Spain
0003 | Norway
Table_2: country_count
country_id | count
------------+------
Italy | 4
0001 | 4
0002 | 2
Norway | 1
Я использовал 1-ю таблицу в качестве ищите и замените идентификаторы фактическими именами, используя простой INNER JOIN
. Однако в этой ситуации я не могу.
Я обошел проблему с этим запросом, но он неэффективен, потому что он анализирует данные дважды:
SELECT cs.name, cc.count
FROM country_count cc
INNER JOIN countries cs ON cc.country_id = cs.country_id
UNION ALL
SELECT country_id name, count
FROM country_count
WHERE country_id NOT IN (SELECT country_id FROM countries)
ORDER BY count DESC
which returns the wanted result, like this:
name | count
------------+------
Italy | 4
France | 4
Spain | 2
Norway | 1
Как я могу упростить его? и эффективнее?