我想在内部select语句中使用声明的表名但不能

时间:2016-10-05 07:58:17

标签: sql sql-server

SELECT DISTINCT 
    W.AVG_WGHT
    FROM
    ***[LOT] L***                                                       
    INNER JOIN  [DBO].[OWNR_MKUP] MK ON L.[OWNR_INFO_ID= MK.[OWNR_ID]
   ,(SELECT  [AVG_WGHT] 
       FROM [DBO].[DLY_LOT_SUM] DLS
            INNER JOIN [DBO].[LOT] L ON DLS.[LOT_ID] = L.[LOT_ID]
            WHERE DLS.[COST_DTE] = (SELECT MAX(DTE) FROM [DBO].[DLY_HEAD_CNT]  WHERE [LOT_ID] = L.[LOT_ID] AND [CUR_HEAD_CNT] > 0 AND [DTE] <=  @COST_DTE           
   ) W

在内部SELECT语句中,我再次在LOT L上使用了内连接,但我不想这样做,我想使用之前声明的LOT L,但SQL不允许它使用。

由于LOT L上的内连接再一次得到多个记录,我不想在上面的SELECT DISTINCT中使用这个内部SELECT语句

1 个答案:

答案 0 :(得分:1)

您正在使用显式连接语法和隐式(逗号分隔)连接语法。当您无条件地隐式加入子查询时,您将获得一个笛卡尔积。在92中的ANSI-SQL中,逗号分隔的连接已被显式连接语法所取代,不鼓励使用逗号分隔的连接。

您可能需要的是:

SELECT DISTINCT 
           DLS.AVG_WGHT
FROM       [LOT] L                                                       
INNER JOIN [DBO].[OWNR_MKUP] MK 
        ON L.[OWNR_INFO_ID= MK.[OWNR_ID]
INNER JOIN [DBO].[DLY_LOT_SUM] DLS
        ON DLS.[LOT_ID] = L.[LOT_ID]
--WHERE      DLS.[COST_DTE] = [DBO].[DLY_HEAD_CNT] I don't understand this line, what is `[DBO]`?