3

2 つの別々のテーブル (テーブル A とテーブル B) が必要です。テーブル A には約 15 の列があり、重要なのは [First Name] と [Last Name] だけです。テーブル B にはさらに多くの列があり、ここでも気になるのは FirstName と LastName だけです (テーブル B のフィールドには、テーブル A のようにスペースが含まれていません)。

どちらも Access にあり、テーブル A にいないテーブル B の人を検索するクエリを作成しようとしています。

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 から First Name + Last Name のエイリアスを作成しようとするのは好きではありませんが、それ以外の場合はどうすればよいかわかりません。

4

4 に答える 4

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
于 2011-12-13T16:52:41.350 に答える
0

提案: VIEWs を使用して、データ要素名から迷惑なスペースを削除し、一貫した名前を付け、完全な名前属性を連結します。

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
                  );

ANSI-92 クエリ モードCREATE VIEWが必要であることに注意してください。たとえば、ADO 接続を使用します。

ps 「テーブル A にないテーブル B の人」の演算子は、semi difference aka antijoinとして知られています。

于 2011-12-15T16:24:10.420 に答える
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 からすべてのレコードが得られます。次に、WHERE を使用して、一致しないレコードにフィルターできます。

于 2011-12-13T16:53:28.613 に答える
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)
于 2011-12-13T16:58:43.710 に答える