4

ECRDTL_del と ECRDTL_edit の 2 つのテーブルがあり、ECRDTL_edit にない ECRDTL_del のレコードのみを表示したいと考えています。MYSQL の左結合を使用してみましたが、目的の結果が得られません。ここに私の現在のクエリ文字列があります:

SELECT a.*
FROM ECRDTL_del AS a
    LEFT JOIN ECRDTL_edit AS b ON b.Ecrno = a.Ecrno
WHERE b.Cylno <> a.Cylno

以下に示すこれら 2 つのテーブルと期待される結果の両方のデータ例:

ECRDTL_del:

Ecrno  Cylno
9090   8881
9090   8882
9090   8883
9090   8884

ECRDTL_編集:

Ecrno  Cylno
9090   8881
9090   8885
9090   8886
9090   8884

LEFT 結合後に期待される結果:

Ecrno  Cylno
9090   8882
9090   8883
4

3 に答える 3

12

あなたの質問から:

「...ECRDTL_edit にない ECRDTL_del のレコードのみを表示したい。」

近くにいます。確認する必要があるのはb.Ecrno IS NULL.

SELECT a.* 
FROM   ECRDTL_del AS a 
       LEFT JOIN ECRDTL_edit AS b 
          ON a.Ecrno = b.Ecrno AND 
             a.Cylno = b.Cylno
WHERE  b.Ecrno IS NULL

出力

╔═══════╦═══════╗
║ ECRNO ║ CYLNO ║
╠═══════╬═══════╣
║  9090 ║  8882 ║
║  9090 ║  8883 ║
╚═══════╩═══════╝
于 2013-04-10T12:53:02.153 に答える
3

私は通常EXISTS、このタイプのものに使用します:

SELECT *
FROM ECRDTL_del as a
WHERE NOT EXISTS(
    SELECT *
    FROM ECRDTL_edit as b
    WHERE b.Ecrno = a.Ecrno
    AND b.Cylno = a.Cylno
)

一致するレコードが見つかった瞬間に停止しますが、のようなものINは一致するレコードを検索し続けます。

于 2013-04-10T13:01:57.477 に答える
1
select * from ECRDTL_del where Cylno not in (select Cylno from ECRDTL_edit)
于 2013-04-10T12:52:26.387 に答える