1

MYSQL(編集者HeidiSQL)で知りたい

2つのテーブル(電子メールとスパム)2行(ID、EMAIL)があり、データベースをクリーンアップしたい:集合演算の例で使用されるテーブル

                                EMAIL

                                  x  y
                           ------------------
                                  1  one@edu.com     
                                  2  two@edu.com     
                                  2  two@edu.com      
                                  3  three@edu.com    

                                SPAM

                                  x  z
                           ------------------
                                  1  one@edu.com      
                                  2  two@edu.com      
                                  4  four@edu.com     

通常、私はEXCEPTを使用しますが、MYSQLでは機能しません。

proc sql; タイトル'EMAILEXCEPT SPAM' select * from sql.EMAILた​​だし、select * from sql.SPAM;

最初のクエリ結果のみに含まれる行の生成(EXCEPT)

                               EMAIL EXCEPT SPAM

                                  x  y
                           ------------------
                                  3  three@edu.com    

WHERE NOT EXISTSを使おうとしていますが、わかりません。

クエリを作成するのを手伝ってくれませんか:

SELECT * FROM EMAIL WHERE ... ????

ありがとう

4

3 に答える 3

2
SELECT * FROM EMAIL WHERE y NOT IN (SELECT z FROM SPAM)
于 2012-04-10T13:02:57.267 に答える
2

スパムの Null を使用した Left Outer Join は機能するはずです。

SELECT E.*
FROm EMAIL E
LEFT JOIN SPAM S
  ON E.Email = S.Email
WHERE S.Id IS NULL
于 2012-04-10T13:03:32.860 に答える
0

通常、私はEXCEPTを使用しますが、MYSQLでは機能しません。

EXCEPTmySQLではサポートされていません。ALL | DISTINCT明示的なキーワードがない場合、EXCEPTデフォルトは。であることに注意してくださいEXCEPT DISTINCT。したがって、回避策では、明示的に使用する必要がありますSELECT DISTINCTSELECTデフォルトはSELECT ALL)であるためです。

WHERENOTEXISTSを使用しようとしています

SELECT DISTINCT y 
  FROM EMAIL 
 WHERE NOT EXISTS ( SELECT * 
                      FROM SPAM
                     WHERE y = z );
于 2012-04-10T14:45:44.320 に答える