0

私はSQLでこのクエリを持っています

SELECT E.ID E.name
into #TmpEmplyee
FROM Employee E, Outsourcing O, Student S
WHERE E.ID NOT IN (SELECT ID FROM Student UNION SELECT ID FROM Outsourcing)

そして、私にはこの例外があります:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.name FROM Employee E, Outsourcing O, Student S WHERE E.ID NOT IN (SELECT ID FRO' at line 1

内部クエリを実行しようとしましたが、機能します。問題はオペレーターにあると思いますが、NOT INどこにあるのかわかりません。助けていただければ幸いです!

4

5 に答える 5

2

カンマが必要です:-)

SELECT E.ID, E.name
于 2012-12-08T13:05:37.233 に答える
1

カンマがありません:

SELECT E.ID, E.name
           ^--

E.name現在、のエイリアスとして定義しようとしていますE.IDが、エイリアスにピリオドを含めることはできません。

于 2012-12-08T13:05:53.853 に答える
1
SELECT E.ID, E.name
into #TmpEmplyee
FROM Employee E, Outsourcing O, Student S
WHERE E.ID NOT IN (SELECT ID FROM Student UNION SELECT ID FROM Outsourcing);

カンマは重要です。

于 2012-12-08T13:06:15.420 に答える
1

クエリの間にコンマが必要です

SELECT E.ID,E.name
into #TmpEmplyee
FROM Employee E, Outsourcing O, Student S
WHERE E.ID NOT IN (SELECT ID FROM Student UNION SELECT ID FROM Outsourcing)
于 2012-12-08T13:07:02.470 に答える
1

INを避け(NOT INはNULL値で予期しないことを行います(ただし、これらの「キーフィールド」はおそらくnull許容ではないため、ここでは問題になりません)、UNIONを避けます(UNIONは重複を削除する必要があるため、次のことを行う必要があります)。 2回ソート))、特に不要な場合;-)

注:以下のクエリは「短絡」する可能性があるため(一方がTrueを生成する場合、両方のEXISTSを評価する必要はありません)、UNIONバリアントよりもサブクエリでフェッチする必要のある行が少なくなる可能性があります。

SELECT E.ID,E.name
-- into #TmpEmplyee
FROM Employee E
WHERE NOT EXISTS (
    SELECT * 
    FROM Student s
    WHERE s.ID=E.ID
    )
AND NOT EXISTS (
    SELECT *
    FROM Outsourcing o
    WHERE o.ID=E.ID
    )
    ;
于 2012-12-08T13:16:27.087 に答える