我有两个表,Service和Site-它们具有一对多的关系,Service中的一行可能在Site中有多行。
我正在获取Site表,其中一些ID被用于超过一次。现在我想从本站点的Service获取所有行。
SERVICE Table{id}
SITE Table{id,svcId(from SERVICE Table),siteid}
SELECT *
FROM SERVICE
WHERE EXISTS(
SELECT * FROM SITE WHERE (siteid='3' or siteid='4') AND id IN (
SELECT id FROM SITE GROUP BY id HAVING count(*) > 1
))
存在中的选择查询存在,使用siteid
3和4多次获取所有行但是整个查询从SERVICE TABLE
获取所有行。我只期待具有匹配ID的行。
答案 0 :(得分:0)
您应该在条件and s.id = st.svcId
中添加适当的别名。
SELECT *
FROM SERVICE s
WHERE EXISTS
(SELECT *
FROM SITE st
WHERE (siteid='3'
OR siteid ='4')
AND id IN
( SELECT id FROM SITE GROUP BY id HAVING COUNT(*) > 1
)
and s.id = st.svcId
);
答案 1 :(得分:0)
您似乎想要与BOTH siteid 3 AND 4相关的服务(即该服务的数量将> 1)。
SELECT sv.*
FROM SERVICE sv
INNER JOIN (
SELECT
svcId
FROM SITE
WHERE (siteid = '3' OR siteid = '4')
GROUP BY
svcId
HAVING COUNT(*) > 1
) si ON sv.id = si.svcId