Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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中,是否可以联接到引用其他联接中的外部表的select语句?_Sql_Sql Server_Join - Fatal编程技术网

在sql中,是否可以联接到引用其他联接中的外部表的select语句?

在sql中,是否可以联接到引用其他联接中的外部表的select语句?,sql,sql-server,join,Sql,Sql Server,Join,我要做的是转换以下sql SELECT X FROM Y LEFT JOIN Z ON Y.Id=Z.id WHERE Y.Fld='P' 进入 我之所以要这样做,是因为Z有多行可以连接到Y,它们不是唯一的,只是我们需要的是最新的一行,我们只需要一条记录。这可能吗?我尝试过,但mssql抱怨我无法从子查询中引用Y.Id。CTE方法如何: ;WITH CTE AS ( SELECT Id, PrimaryKey, ROW_NUMBER()

我要做的是转换以下sql

SELECT X 
FROM Y LEFT JOIN Z ON Y.Id=Z.id
WHERE Y.Fld='P'
进入


我之所以要这样做,是因为Z有多行可以连接到Y,它们不是唯一的,只是我们需要的是最新的一行,我们只需要一条记录。这可能吗?我尝试过,但mssql抱怨我无法从子查询中引用Y.Id。

CTE方法如何:

;WITH CTE
AS
(
    SELECT Id, 
           PrimaryKey, 
           ROW_NUMBER() OVER (PARTITION BY Id, ORDER BY Primarykey Desc) AS RN
    FROM Z
)
SELECT X
FROM Y
LEFT JOIN CTE
   ON CTE.ID = Y.ID
WHERE CTE.RN = 1

将左连接更改为外部应用,并删除ON 1=1。您应该完全按照@Siyual所说的操作,但唯一需要注意的是,您需要向其添加别名:从Y中选择X外部应用选择顶部。。。。。B…..你想干什么?我觉得order by毫无意义,因为您没有从Z报告任何内容。这只是一个简化的示例,很抱歉,它不完整。我正在处理的真正的查询要大得多,但我隔离了我有疑问的部分
;WITH CTE
AS
(
    SELECT Id, 
           PrimaryKey, 
           ROW_NUMBER() OVER (PARTITION BY Id, ORDER BY Primarykey Desc) AS RN
    FROM Z
)
SELECT X
FROM Y
LEFT JOIN CTE
   ON CTE.ID = Y.ID
WHERE CTE.RN = 1