質問

私は私のSQLが

最大ではないと私と一緒にご負担ください...私はこの1つで正しい道を下って行くと思います

私は、特定の細胞が他に存在しない一つのテーブルからすべてを選択するためのデータベースを照会しようとしています。それだけ多くの意味がありませんが、私は願っていたコードのこの作品は

SELECT * from employees WHERE NOT EXISTS (SELECT name FROM eotm_dyn)

だから、基本的に私は、従業員とその詳細のリストで一つのテーブルを持っています。そして、自分の名前を含むいくつかのその他の詳細、と別のテーブル。そこに名前が彼らのためにエントリが存在しないという意味、eotm_dynテーブルにない場合は、私は彼らがしている、または他の言葉で、正確に欠けているものを参照してください正確に誰が見たいと思います。

上記のクエリは何も返しませんが、私は行方不明20ish名前がある知っているので、私は明らかに右のそれを得ていませんでした。

誰が助けることはできますか?

役に立ちましたか?

解決

あなたはあなたのクエリ内のテーブルに参加しませんでした。

それがすべてを返します。その場合には全くeotm_dynにはレコードが、存在しない場合を除き、

あなたの元のクエリは、常に何も返さないでしょう。

次のように使用し、これらのテーブルはemployeeIDに参加しなければならないと仮定すると:

SELECT  *
FROM    employees e
WHERE   NOT EXISTS
        (
        SELECT  null 
        FROM    eotm_dyn d
        WHERE   d.employeeID = e.id
        )

あなたはLEFT JOINキーワードでこれらのテーブルを結合し、NULL年代を除外しますが、これはおそらくNOT EXISTSを使用するよりも効率的になることができます。

他のヒント

SELECT * FROM employees WHERE name NOT IN (SELECT name FROM eotm_dyn)

または

SELECT * FROM employees WHERE NOT EXISTS (SELECT * FROM eotm_dyn WHERE eotm_dyn.name = employees.name)

または

SELECT * FROM employees LEFT OUTER JOIN eotm_dyn ON eotm_dyn.name = employees.name WHERE eotm_dyn IS NULL

あなたはLEFT JOINをし、結合列がNULLである主張を行うことができます。

例:

SELECT * FROM employees a LEFT JOIN eotm_dyn b on (a.joinfield=b.joinfield) WHERE b.name IS NULL
SELECT * from employees
WHERE NOT EXISTS (SELECT name FROM eotm_dyn)
eotm_dynが空でない限り、

すべてのレコードを返すことはありません。あなたは、

のようなSELECT name FROM eotm_dyn上の基準のいくつかの種類に必要
SELECT * from employees
WHERE NOT EXISTS (
    SELECT name FROM eotm_dyn WHERE eotm_dyn.employeeid = employees.employeeid
)

二つのテーブルを外部キー関係によってリンクされていると仮定。この時点では、LEFT JOINを含む他のさまざまなオプションを使用することができます。オプティマイザは通常、しかし、彼らにほとんどの場合、同じを処理します。

また、この関連する質問するを見てすることができます。そのユーザは、サブクエリを使用するよりも参加して優れたパフォーマンスを使用していることを報告します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top