Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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_Sql Server - Fatal编程技术网

具有两个表联接的SQL查询问题

具有两个表联接的SQL查询问题,sql,sql-server,Sql,Sql Server,我的SQL Server中有两个不同的表(Dorig和Dotes),它们通过列id\u Dotes连接在一起 我需要一个查询帮助,该查询返回Dorig的结果,列为NumeroDocRif,仅出现在表Dotes中,当此条件为真时,必须提取最后一个 dorig.id_dorig = dorig.id_dorig_evade 我尝试创建此查询,但它不能完全正常工作: SELECT dorig.Id_Dorig, dotes.NumerodocRif FROM dorig LEFT

我的SQL Server中有两个不同的表(
Dorig
Dotes
),它们通过列
id\u Dotes
连接在一起

我需要一个查询帮助,该查询返回
Dorig
的结果,列为
NumeroDocRif
,仅出现在表
Dotes
中,当此条件为真时,必须提取最后一个

dorig.id_dorig = dorig.id_dorig_evade

我尝试创建此查询,但它不能完全正常工作:

SELECT 
    dorig.Id_Dorig, dotes.NumerodocRif
FROM 
    dorig
LEFT JOIN 
    dotes ON dotes.id_Dotes = dorig.id_Dotes
WHERE 
    id_dorig IN (SELECT DISTINCT id_dorig_evade 
                 FROM dorig 
                 WHERE id_dotes = dorig.id_dotes)
你能帮帮我吗

非常感谢

 create table dorig (id_dorig int, id_dotes int, id_dorig_evade int);

 create table dotes(id_dotes int, numerodocrif varchar(50));




insert into dorig values(16934,3116,4894);
insert into dorig values(4894,1090,null);
insert into dotes values(1090,'7000079957');


SELECT d.Id_Dorig,d.id_dotes,dt.NumerodocRif
  FROM dorig d inner join dorig dg
  on d.id_dorig_evade =dg.id_dorig
  inner JOIN dotes dt ON dt.id_Dotes = dg.id_Dotes
  
多利格 我爱你 数字阅历 16934 3116 7000079957
似乎你所需要做的就是将你在问题文本中所写的陈述替换为你的第二个
WHERE
子句:

SELECT dorig.Id_Dorig,dotes.NumerodocRif
  FROM dorig
  LEFT JOIN dotes ON dotes.id_Dotes = dorig.id_Dotes
  WHERE id_dorig IN 
     (SELECT DISTINCT id_dorig_evade FROM dorig 
      WHERE dorig.id_dorig = dorig.id_dorig_evade)

欢迎使用SO,但请编辑您的问题,在当前状态下,其质量与指南不匹配,请包括样本数据、预期输出、纯文本编写的清晰逻辑,以及。同样使用
sql
标记,您也应该始终标记您的DBMS(例如Oracle、sql server),访问以获取更多信息。请共享示例数据并输出您是否只是在查找
其中id\u dorig=id\u dorig\u规避
?“它工作不完全正常”并没有告诉我们任何信息。它返回的行是否太多?太少了?你有运行时错误吗?您应该显示一些示例数据、预期结果,并解释您的查询与预期的不同之处。你问这个数据库管理系统是什么?SQL请求应始终标记有问题的DBMS。您的
JOIN
语句将确保只有记录将显示两个
id\u注释相等的位置。因此,您已经可以从
dorig
中选择相关的唯一
dorig\u规避
?最后一个
WHERE
子句似乎是多余的,因为
id\u dotes
将作为联接的结果而相等?除非您也需要将join应用于(…)
子句中的
。在这种情况下,您还需要在子查询中包含
JOIN
?(子查询是(…)
语句中的
部分。由于第一个
JOIN
只适用于封装语句,它不适用于子查询。它不起作用。您可以共享示例数据吗?我刚刚在上面的回答中添加了它。请检查我的修订答案。它不起作用,因为“c”不是有效的吗?我没有这个查询的结果。
从dorig中选择不同的id\u dorig\u规避,其中dorig.id\u dorig=dorig.id\u dorig\u规避
它返回任何结果吗?如果没有,那么
dorig.id\u dorig=dorig.id\u dorig\u规避
在您的数据中永远不会为真。