代码之家  ›  专栏  ›  技术社区  ›  peter.babic

简化MySQL查询联合

  •  0
  • peter.babic  · 技术社区  · 11 年前

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

    (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 回复  |  直到 5 年前
        1
  •  1
  •   CodeBird    11 年前

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

    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
    
        2
  •  0
  •   Mithun Khatri    11 年前

    对这会奏效的。 但与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)