Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存在与左连接的问题_Sql_Oracle_Left Join_Where_Exists - Fatal编程技术网

Sql 存在与左连接的问题

Sql 存在与左连接的问题,sql,oracle,left-join,where,exists,Sql,Oracle,Left Join,Where,Exists,我有两个表,服务和站点-它们有一对多的关系,服务中的一行可能在站点中有多行 我正在获取站点表,其中一些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 (

我有两个表,服务和站点-它们有一对多的关系,服务中的一行可能在站点中有多行

我正在获取站点表,其中一些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多次提取所有行,但整个查询从
服务表中提取所有行。我希望只有id匹配的行。

您应该添加一个条件
,并且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
  );

您应该添加一个条件
和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
  );

似乎您需要同时与siteid 3和siteid 4相关的服务(即,该服务的计数将大于1)


似乎您需要同时与siteid 3和siteid 4相关的服务(即,该服务的计数将大于1)


请提供样本数据和预期结果。
服务
表格与
站点
表格有何关联?子查询与外部表中的任何列都不相关,因此它总是给出
服务
表中的所有行或无行。请提供示例数据和预期结果。
服务
表与
站点
表的关系如何?子查询没有通过外部表中的任何列与外部查询关联,因此它总是从
service
表中给出全部行或无行。不知何故,我总是在说“si.svcId”作为无效标识符时遇到sql错误,即使该列存在于DB中。不确定出了什么问题。子查询本身可以工作吗?选择svcId FROM SITE WHERE(siteid='3'或siteid='4')GROUP BY svcId HANG COUNT(*)>1,则没有明显的错误原因,除非您删除了答案中显示的子查询别名si。然后,就没有明显的错误原因。我不能再做任何事情了。不知何故,我总是在这个问题上得到一个sql错误,说“si.svcId”作为无效标识符,即使该列存在于数据库中。不确定出了什么问题。子查询本身可以工作吗?选择svcId FROM SITE WHERE(siteid='3'或siteid='4')GROUP BY svcId HANG COUNT(*)>1,则没有明显的错误原因,除非您删除了答案中显示的子查询别名si。然后,就没有明显的错误原因。我再也做不到了。