2

Access データベースに 2 つのテーブルがあります。Table1 には Table2 よりも多くの列があります。重複を削除しながら、これらのテーブルを 1 つにマージしたいと思います。次のクエリがあります

SELECT FirstName, LastName, PhoneNumber FROM Table1
UNION
SELECT FirstName, LastName, Null as PhoneNumber  FROM Table2

問題は、Table1 の FirstName と LastName が同じエントリを Table2 からコピーしたくないということです。上記のクエリを変更してそれを達成するにはどうすればよいですか? 前もって感謝します。

4

3 に答える 3

5

Table2で一致しない行のみを返すクエリから始めますTable1

SELECT t2.FirstName, t2.LastName
FROM
    Table2 AS t2
    LEFT JOIN Table1 AS t1
    ON 
            t2.FirstName = t1.FirstName
        AND t2.LastName = t1.LastName
WHERE t1.FirstName Is Null;

次に、それをクエリで使用しSELECTますUNION

SELECT FirstName, LastName, PhoneNumber FROM Table1
UNION ALL
SELECT t2.FirstName, t2.LastName, t2.Null AS PhoneNumber
FROM
    Table2 AS t2
    LEFT JOIN Table1 AS t1
    ON 
            t2.FirstName = t1.FirstName
        AND t2.LastName = t1.LastName
WHERE t1.FirstName Is Null;

UNION ALLdbエンジンによる作業が少なくて済むため、使用したことに注意してください。したがって、高速です。UNIONdb エンジンで重複する行を除外したい場合にのみ使用します。ただし、この場合、それは必要ありません...ただし、これらのテーブルの一方または両方に重複が別々に存在する場合を除きます。

于 2013-10-04T03:39:39.737 に答える
2

次のように制約してみてください。

SELECT FirstName, LastName, PhoneNumber FROM Table1
UNION
SELECT FirstName, LastName, Null as PhoneNumber FROM Table2 
WHERE FirstName NOT IN (SELECT FirstName FROM Table1) 
AND LastName NOT IN (SELECT LastName FROM TABLE1);
于 2013-10-04T03:20:25.200 に答える
0

FaddishWorm には優れたコンセプトがありますが、2 つの別個のサブクエリにより、名または姓が一致するレコードが削除されます。NOT x AND NOT y = NOT(x OR y)。したがって、Hernandez や Jim などの名前は TABLE2 から省略されます。

連結してみてください。

SELECT FirstName, LastName, PhoneNumber FROM Table1
UNION
SELECT FirstName, LastName, Null as PhoneNumber FROM Table2 
WHERE FirstName & Lastname NOT IN (SELECT FirstName & lastname FROM Table1);

他の解決策があります。これは遅いです。HandsUp には正しい考えがあります。

于 2014-12-05T20:19:58.637 に答える