存在的 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