1

私は2つのテーブルを持っています(おそらく、それらはうまく構築されていません)。

表1

id  |  word  |  user
1   |  a     |  me
2   |  b     |  dad
3   |  c     |  mom
4   |  d     |  sister

テーブル2

id  |  word  |  user
1   |  a     |  me
2   |  b     |  dad

table1 と等しい table2 の行を除いて、table1 のすべての行を表示したいと考えています。この場合、select はテーブルから行 3 と 4 を表示する必要があります。

ありがとう。

4

5 に答える 5

8

これを試して

Select * from Table1
   Except
     Select * from Table2
于 2013-01-02T21:06:29.267 に答える
4

どの RDBMS を指定していませんがNOT EXISTS、すべてのデータベースで使用できます。

select *
from table1 t1
where not exists (select *
                  from table2 t2
                  where t1.word = t2.word
                    and t1.user = t2.user 
                    -- add other columns here for comparison including id)

デモで SQL Fiddle を参照してください

于 2013-01-02T21:06:48.313 に答える
1

使用している SQL のフレーバーを指定しなかったため、おそらく EXCEPTS を避けて標準の ANSI SQL を使用するのが賢明です。したがって、これは左外部結合を使用する場合です。

SELECT t1.*  
FROM table1 AS t1  
    LEFT OUTER JOIN table2 AS t2  
        ON t1.word = t2.word
        AND t1.user = t2.user
WHERE t2.id IS NULL
于 2013-01-02T21:07:44.883 に答える
1

使用できますEXCEPT(SQL-Server >= 2005)

SELECT id, word, user
FROM Table1
EXCEPT
SELECT id, word, user
FROM Table2;

デモ

于 2013-01-02T21:08:09.947 に答える
1

そのようです:

SELECT *
FROM Table1
WHERE id NOT IN(SELECT id FROM Table2);

述語 NOT IN Fiddle デモ

または:次LEFT JOINのようなものを使用:

SELECT t1.*
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE t2.id IS NULL;

LEFT JOIN フィドルのデモ

于 2013-01-02T21:05:40.657 に答える