1

私は2つの同一のテーブルを持っています

それらをt1とt2と呼びましょう

そして、私はそれらの両方からのデータを表示したいのですが、それらは同一の行を持っている可能性があります(これらの行が同じであるとしましょうid)

その場合、テーブル 1 からのみ行を取得し、2 番目のテーブルの行は無視します。

それで

SELECT column_name(s) FROM t1 UNION SELECT column_name(s) FROM t2 

しかし、重複をどのように処理すればよいですか?

4

3 に答える 3

1

DISTINCTSELECT 結果セットから重複を削除する場合は、サブクエリで句を使用できます

SELECT DISTINCT * FROM (SELECT value FROM t1 UNION SELECT value FROM t2) AS S

または、次のUNION DISTINCT構文を使用することもできます。

SELECT value FROM t1 UNION DISTINCT SELECT value FROM t2;

ところで、 forUNIONのデフォルトはUNION DISTINCT(一方、 forSELECTSELECT ALLデフォルトです) であるため、これは次のように書き換えることができます。

-- without specifier UNION is implicitly DISTINCT
SELECT value FROM t1 UNION SELECT value FROM t2;

...実際、これはあなたが提案したクエリです。それの何が問題だったのですか?私のテストセットで動作します: http://sqlfiddle.com/#!2/d4812/1


おそらく、実際のテーブル コンテンツを含む sqlfeedleが、より良い答えを提供するのに役立つかもしれません。

于 2013-08-01T11:57:54.060 に答える
1

これのことですか?

      select column1 , column2 from (
           SELECT column1 , column2 FROM t1 
           UNION 
           SELECT column1 , column2 FROM t2 
       )t
       group by column1

ここに個別の column1 があります

于 2013-08-01T11:51:05.190 に答える
0

1 つの方法を次に示します。

SELECT column_name(s)
FROM t1
UNION
SELECT column_name(s)
FROM t2 
where not exists (select 1
                  from t1
                  where t1.col1 = t2.col1 and t1.col2 = t2.col2 and . . .
                 )
于 2013-08-01T11:52:31.070 に答える