我有这样的问题:
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)
它也可以完美地运行,但与使用联合的第一个查询相比,它非常慢。
因此可以用另一种方式编写查询,所以我得到了第一个查询的性能而没有多次重复自己。
感谢。
答案 0 :(得分: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
答案 1 :(得分: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