让我们,英国在一个表,cn和jp在另一个,但不是在两个

时间:2010-07-13 19:28:29

标签: sql mysql full-outer-join

在乡村语言中,

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

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

“内连接通过选择连接表中匹配行的组合来生成结果。但是,它找不到不匹配”

“左连接将左表(指定的第一个表)视为引用表,并为从中选择的每一行生成输出,无论该行是否与右表中的行匹配”

得到我们,英国,cn和jp,但不是br:

  • 内部联接找不到不匹配(br<> br不起作用)。
  • 外部联接会在一个(我们和英国)中找到全部,或者在另一个中找到所有(cn和jp)。

你使用两个外连接吗?

2 个答案:

答案 0 :(得分:0)

你所追求的被称为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)

这是a good reference link, with visual examples of various JOINs

答案 1 :(得分:0)

接近这个的另一种方法是:

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