简化MySQL查询联合

时间:2014-03-22 20:54:35

标签: database mysqli union simplify

我需要知道,这是正确的方法:

(SELECT id, name, 1 AS reference FROM antenna WHERE id IN (SELECT antenna_id FROM reference)) 
UNION DISTINCT
(SELECT id, name, 0 AS reference FROM antenna WHERE id NOT IN (SELECT antenna_id FROM reference))

已经做了一段时间,即使它完美无缺,也很难看。

2 个答案:

答案 0 :(得分:1)

脱离我的头脑,我不确定它是否有效,测试和基准:

SELECT antenna.id, antenna.name, CASE WHEN COALESCE(reference.antenna_id, 0)!=0 
THEN 1 ELSE 0 END AS reference FROM antenna LEFT JOIN reference 
ON antenna.id=reference.antenna_id

答案 1 :(得分:0)

是。它会工作。 但与JOIN相比,IN子句的性能较差。此外,IN子句限制为1000条记录。

请改用此查询 -

(SELECT id, name, 1 AS reference FROM antenna a, reference ref
where a.id = ref.antenna_id)
UNION
(SELECT id, name, 0 AS reference FROM antenna a, reference ref
where a.id != ref.antenna_id)