1

国の言語では、

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

国名で、

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

「内部結合は、結合されたテーブルから一致する行の組み合わせを選択することによって結果を生成します。ただし、一致しないものは見つかりません。」

「左結合は、左のテーブル(最初に名前が付けられたテーブル)を参照テーブルとして扱い、その行が右のテーブルの行と一致するかどうかに関係なく、そこから選択された各行の出力を生成します。」

私たちを取得するには、uk、cn、jpを取得しますが、brは取得しません。

  • 内部結合は不一致を見つけることができません(br <> brは機能しません)。
  • 外部結合は、すべてを1つ(usとuk)に、またはすべてをもう1つ(cnとjp)に検索します。

2つの外部結合を使用していますか?

4

2 に答える 2

0

あなたが求めているのはFullOuterJOINと呼ばれ、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の視覚的な例を含む優れたリファレンスリンクです。

于 2010-07-13T19:34:29.857 に答える
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
于 2010-07-14T12:32:42.573 に答える