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 回答
1
SELECT e.firstname, e.surname
FROM employees e left join cities c
on e.cityid = c.id OR e.cityid = '' OR e.cityid is null
于 2013-06-19T08:15:25.393 回答