получить нас, Великобритания в одной таблице, cn и jp в другой, но не br в обоих - PullRequest
1 голос
/ 13 июля 2010

В countrylanguage,

countrycode | language  
US | English  
BR | Portuguese  
UK | English  

в названии страны,

countrycode | name  
CN | China  
BR | Brazil  
JP | Japan  

"внутреннее объединение дает результаты, выбирая комбинации совпадающих строк из соединенных таблиц. Однако не может найти не-matches "

" Левое объединение обрабатывает левую таблицу (названную первой) как справочную таблицу и выдает выходные данные для каждой выбранной строки, независимо от того, соответствует ли строка строкам в правой таблице"

Чтобы получить нас, uk, cn и jp, но не br:

  • внутренние объединения не могут найти несоответствия (br <> br не будет работать).
  • внешние объединения найдут все в одном (us и uk) или все в другом (cn и jp).

Используете ли вы два внешних объединения?

Ответы [ 2 ]

0 голосов
/ 14 июля 2010

Другой способ приблизиться к этому:

select countrycode, max(language), max(name) from
(select countrycode, language, ' ' name from countrylanguage union all
select countrycode, ' ' language, name from countryname ) ilv
group by countrycode having count(*) = 1
0 голосов
/ 13 июля 2010

То, что вы ищете, называется Full Outer JOIN, для которого MySQL не имеет явного синтаксиса.Используйте:

SELECT cl.countrycode,
       cl.language
  FROM COUNTRYLANGUAGE cl
 WHERE NOT EXISTS(SELECT NULL
                    FROM COUNTRYNAME cn
                   WHERE cn.countrycode = cl.countrycode)
UNION ALL
SELECT cn.countrycode,
       cn.name
  FROM COUNTRYNAME cn
 WHERE NOT EXISTS(SELECT NULL
                    FROM COUNTRYLANGUAGE cl
                   WHERE cl.countrycode = cn.countrycode)

Это хорошая справочная ссылка с наглядными примерами различных JOIN * .

...