1

列が同じで行数が異なる 2 つのテーブルを比較したいと考えています。各テーブルに固有の行を見つけるにはどうすればよいですか? いくつかの結合チュートリアルを見つけましたが、2 つのテーブルを結合するには主キーが必要です。私のサンプル テーブルは互いに関係がありません。

サンプルテーブル:

TableA
Id | Name
1 | Person1
2 | Person2
3 | Person3
4 | Person4

TableB
Id | Name
1 | Person1
2 | Person2
4 | Person4

Sample result:
Id | Name
3 | Person3

Optional result:
Id | Name | Table
3 | Person3 | TableA
4

4 に答える 4

3

MySQL には がないため、 join withFULL JOINを使用してシミュレートできます。試す、LEFT or RIGHTUNION

SELECT  a.* , 'TableA' as `Table`
FROM    tableA a
        LEFT JOIN tableB b
            ON a.id = b.id AND
               a.name = b.name
WHERE   b.id IS NULL
UNION
SELECT  d.*, 'TableB' as `Table`
FROM    tableA c
        RIGHT JOIN tableB d
            ON c.id = d.id AND
               c.name = d.name
WHERE   c.id IS NULL

SQLFiddle デモ

于 2012-09-21T01:25:13.120 に答える
2

このクエリは、UNION ステートメントを使用して、TableB に存在しない TableA の行と、TableA に存在しない TableB の行を選択します。

SELECT Id, Name, 'TableA' FROM TableA
WHERE (Id, Name) NOT IN
(SELECT Id, Name FROM TableB)
UNION
SELECT Id, Name, 'TableB' FROM TableB
WHERE (Id, Name) NOT IN
(SELECT Id, Name FROM TableA)
于 2012-09-21T01:36:20.140 に答える
0
SELECT COLUMN_NAME
FROM information_schema.columns
Where table_name="table_1" AND
COLUMN_NAME NOT IN (
SELECT COLUMN_NAME
FROM information_schema.columns
WHERE table_name="table_2")

2番目のテーブルに同じ列(フィールド)がない(サブクエリ)という条件で、最初のテーブルから列名を取得しています。したがって、これにより、質問でも望んでいたように、最初のテーブルに固有のフィールドが得られます。

于 2012-09-21T01:56:08.997 に答える
0

単純なクエリを次のように使用できます

select * from tableA,tableB where tableA.Name Not in tableB.Name And tableB.Name not in tableA.Name

于 2012-09-21T04:16:58.900 に答える