我正在尝试编写一个查询,检查一个表中的值是否在其他表中有任何相应的条目。我有以下哪个有效,但有更快的方法吗?也许使用exists()函数?
为了澄清,这将是sqlite。另外,我需要制造商中每一行的值以及它是否在任何其他表中都有条目。
select tM.val, min(t1.val) as MakesCars, min(t2.val) as MakesTrucks,
min(t3.val) as MakesVans from tableManufactures tM
left join tableCars t1 on tM.id = t1.Manid
left join tableTrucks t2 on tM.id = t2.Manid
left join tableVans t3 on tM.id = t3.Manid
group by tM.val
order by tM.val
结果看起来像这样:
Manufacturer MakesCars MakesTrucks MakesVans
Ford 85 15 20
Chevy 72 12 NULL
Mazda 42 NULL NULL
因此任何值都表明它们确实如此,而null表示它们没有。
答案 0 :(得分:2)
对于连接,数据库必须查找所有匹配的记录,然后由于min()而丢弃大部分记录。
使用EXISTS确实可能更有效率:
SELECT val,
EXISTS (SELECT 1
FROM tableCars
WHERE Manid = tM.id) AS MakesCars,
EXISTS (SELECT 1
FROM tableTrucks
WHERE Manid = tM.id) AS MakesTrucks,
EXISTS (SELECT 1
FROM tableVans
WHERE Manid = tM.id) AS MakesVans
FROM tableManufactures AS tM
ORDER BY val