如何查询以查找一个表中的值是否在其他表中具有任何相应的条目

时间:2014-02-13 18:53:37

标签: sqlite

我正在尝试编写一个查询,检查一个表中的值是否在其他表中有任何相应的条目。我有以下哪个有效,但有更快的方法吗?也许使用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表示它们没有。

1 个答案:

答案 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
相关问题