2

ADATA テーブルと CDATA テーブルの両方にあるレコードのデータを表示する次のスクリプトがあり、姓と名が一致しています (両方のテーブルで同じフィールドのみがあります)。

SELECT
c.asdf AS ASDF,
CONCAT(a.genr, ' ' ,a.firstname, ' ' ,a.lastname) AS Name,
a.rcvdate AS Report_Date,
c.enroll AS Enroll_Date,
a.cvb AS CVB,
c.pctcomp AS Percent_Complete

FROM
adata a,
cdatas c

WHERE
a.firstname = c.firstname
AND a.lastname = c.lastname

ここから行う必要があるのは、ADATA にあるが CDATA にはないレコードのリストと、ADATA にない CDATA のレコードのリストを取得することです。スクリプトの WHERE 部分で使用するさまざまなバリエーションをすべて試しNOTましたが、常に ADATA のレコードの総数である 800 になりました (CDATA テーブルには 130 レコードしかありません)。

これを正しく行う方法はありますか?

4

2 に答える 2

2
SELECT columns
FROM
    adata a
    LEFT JOIN cdatas c ON (a.firstname = c.firstname AND a.lastname = c.lastname)
WHERE
    c.asdf IS NULL
UNION ALL
SELECT columns
FROM
    cdatas c
    LEFT JOIN adata a ON (c.firstname = a.firstname AND c.lastname = a.lastname)
WHERE
    a.cvb IS NULL
于 2013-02-19T14:24:58.683 に答える
1
mysql> create table a (x int);
mysql> create table b (y int);
mysql> insert into a values (1), (2), (3), (4), (5);
mysql> insert into b values (2), (4), (6);
mysql> select x from a where not x in (select y from b);
+------+
| x    |
+------+
|    1 |
|    3 |
|    5 |
+------+
mysql> select y from b where not y in (select x from a);
+------+
| y    |
+------+
|    6 |
+------+
于 2013-02-19T14:25:10.230 に答える