具有左联接的SQL Server 2005更新查询不起作用

时间:2019-06-02 01:34:37

标签: sql sql-server

我正在尝试使用SQL Server 2005中的左联接进行更新查询,但是由于某种原因,它不起作用。

我的SQL语句是这样的:

UPDATE [tblSlots]
SET [tblSlots].[PublishedStartTime] = '10:00'
FROM tblSlots
LEFT JOIN tblDays ON tblSlots.SlotDayID = tblDays.DayID
WHERE tblDays.Published = 1

如果我取出LEFT JOIN行,然后仅过滤例如tblSlots.SlotID,则更新正常。

但是我希望能够在所有发布的日期一次更新广告位。

(我只是作为JOIN尝试过,但是那也不起作用...)

我确定这是非常明显的事情...

感谢您的帮助!

克里斯

3 个答案:

答案 0 :(得分:0)

尝试“拥有”而不是“哪里”

答案 1 :(得分:0)

您可以尝试:

UPDATE [tblSlots]
SET [tblSlots].[PublishedStartTime] = '10:00'

FROM [tblSlots] ,
(
    SELECT DayID FROM
    [tblSlots]
    LEFT JOIN tblDays 
    ON tblSlots.SlotDayID = tblDays.DayID
    WHERE tblDays.Published = 1
) AS [Data_Days]

WHERE 
[Data_Days].DayId = [tblSlots].SlotDayID

答案 2 :(得分:0)

您的查询语法对我来说看起来不错,就像您所说的那样,它可以正常运行,直到您尝试进行更新。这是一个黑暗的镜头,但是如果问题在于在从多个表中进行选择时进行更新,则可能只是更改查询以不加入tblDays即可。

UPDATE [tblSlots]
--SET [tblSlots].[PublishedStartTime] = '10:00'
SET [tblSlots].[PublishedStartTime] = (select SomeValue from tblDays where DayID = SlotDayID) --If a value is needed from Day table
FROM tblSlots
Where SlotDayID in (select DayID from tblDays WHERE Published = 1 and DayID is not null)