2

私はこれらの行に沿ってクエリを持っています:

SELECT e.firstname, e.surname
FROM employees e, cities c
WHERE e.cityid = c.id
UNION
SELECT e.firstname, e.surname
FROM employees e, cities c
WHERE e.cityid = ''
UNION
SELECT e.firstname, e.surname
FROM employees e, cities c
WHERE e.cityid is null

それは完全にうまくいきますが、私は自分自身を数回繰り返さなければならないのが好きではありません (3 回、2 つの結合で区切られています)。

したがって、次のようにクエリを記述しようとしました。

SELECT e.firstname, e.surname
FROM employees e, cities c
WHERE (e.cityid = c.id OR e.cityid = '' OR e.cityid is null)

これも問題なく動作しますが、ユニオンを使用した最初のクエリに比べて非常に遅くなります。

別の方法でクエリを作成することは可能ですか? 何度か繰り返すことなく、最初のクエリのパフォーマンスを得ることができます。

ありがとう。

4

2 に答える 2

2

これは、元のクエリと同じセマンティクスを持ちます。

SELECT DISTINCT e.firstname,
                e.surname
FROM   employees e
       LEFT JOIN cities c
         ON e.cityid = c.id
WHERE  e.cityid = ''
        OR e.cityid IS NULL
        OR c.id IS NOT NULL 
于 2013-06-19T09:09:47.320 に答える