存在的 LEFT JOIN 问题
Issue with LEFT JOIN with Exists
我有两个 table,服务和站点 - 它们具有一对多关系,服务中的一行可能在站点中有多行。
我正在获取站点 table,其中一些 ID 被使用了不止一次。现在我想从该站点的服务中获取所有行。
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
))
里面的 Select 查询存在使用 siteid
3 和 4 多次获取所有行但整个查询正在从 SERVICE TABLE
中获取所有行。我只期待具有匹配 ID 的行。
您应该添加条件 and s.id = st.svcId
,其中包含正确的别名 exists 。
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
);
您似乎需要与 siteid 3 和 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
我有两个 table,服务和站点 - 它们具有一对多关系,服务中的一行可能在站点中有多行。
我正在获取站点 table,其中一些 ID 被使用了不止一次。现在我想从该站点的服务中获取所有行。
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
))
里面的 Select 查询存在使用 siteid
3 和 4 多次获取所有行但整个查询正在从 SERVICE TABLE
中获取所有行。我只期待具有匹配 ID 的行。
您应该添加条件 and s.id = st.svcId
,其中包含正确的别名 exists 。
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
);
您似乎需要与 siteid 3 和 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