2011-12-13 93 views
3

我有兩個獨立的表(表A和表B)。 表A有大約15列,唯一重要的是[名字]和[姓氏]。 表B有更多的列,並且我唯一關心的是FirstName和LastName(表B的字段不包含空格,其中的表A是這樣做的)。SELECT語句比較來自多個表的多個字段

他們都在Access中,我正試着編寫一個查詢,查找表B中不在表A中的人。我非常喜歡SQL,但這裏是我想到的:

SELECT ([Table A].[First Name] + [Table B].[Last Name]) AS FullName 
FROM [Table A] 
LEFT JOIN [Table B] 
ON [Table A].FullName=[Table B].([First Name] + [Table B].[Last Name]) AS FullName 
WHERE [Table A].FullName IS NULL; 

它不喜歡我嘗試爲表B中的名字+姓氏製作別名,但我不知道該如何做。

+0

數據庫名稱中的空格使我的大腦受傷。 –

+0

通過空格你的意思是他們是完全空白的,或者你的意思是他們之間的字符間空格 – user559142

+0

我認爲你的paranthesis是在錯誤的地方..實際上應該不應該在這個查詢中需要任何括號。 –

回答

1

試試這個:

SELECT ([Table A].[First Name] + ' ' + [Table A].[Last Name]) AS FullName 
FROM [Table B] 
LEFT OUTER JOIN [Table A] 
ON [Table A].[First Name]=[Table B].[First Name] AND [Table B].[Last Name] = [Table A].[Last Name] 
WHERE [Table A].[First Name] IS NULL AND [Table A].[Last Name] IS NULL 
0
SELECT ([Table A].[First Name] + [Table B].[Last Name]) AS FullName 
FROM [Table A] 
RIGHT OUTER JOIN [Table B] 
ON [Table A].FullName= ([Table B].([First Name] + [Table B].[Last Name]) 
WHERE [Table A].FullName IS NULL; 

這裏的關鍵是使用外連接時,它會給你從表B中的所有記錄,而不管的加入。然後,您可以使用它過濾到非匹配的記錄,其中

+0

這會找到表A中不在表B中的人,反之亦然。 – jmacinnes

+0

正確和編輯,我讀錯了問題。 – Maess

0

試試這個:

SELECT [B].[First Name] & " " & [B].[Last Name] AS FullName 
FROM TableB AS B 
WHERE [B].[First Name] & " " & [B].[Last Name] NOT IN 
(SELECT [First Name] & " " & [Last Name] FROM TableA) 
0

建議:使用VIEW s到要從數據元素名稱那些煩人的空間,提供了一個一致的命名和連接全名屬性,例如

CREATE VIEW TableA 
AS 
SELECT [First Name] AS first_name, 
     [Last Name] AS last_name, 
     first_name + ' ' + last_name AS full_name 
    FROM [Table A]; 


CREATE VIEW TableB 
AS 
SELECT FirstName AS first_name, 
     LastName AS last_name, 
     first_name + ' ' + last_name AS full_name 
    FROM [Table B]; 

SELECT * 
    FROM TableB AS B 
WHERE NOT EXISTS (
        SELECT * 
        FROM TableA AS A 
        WHERE B.full_name = A.full_name 
       ); 

CREATE VIEW要求ANSI-92 Query Mode例如使用ADO連接。

p.s. 「表B中不在表A中的人」的操作員被稱爲semi difference a.k.a. antijoin

+0

這個查詢需要很長時間來處理,我有最新的Phpmyadmin和Navicat,當我執行最後一個時,兩者都會卡住。我需要這樣的東西,但也許更快?我有50K +記錄,我在包含字符串200Characters的列上比較tableA/B。對於這種情況的任何建議?謝謝 – Awena