使用来自 SQL UPDATE 查询的多个数据
Using multiple data from a SQL UPDATE query
我正在使用下面的查询将数据写入临时 table。为此,我使用更新命令。但是,有时 table 中的值可能不止一个,在这种情况下,我的更新查询 select 是第一个值。当多个值出现时,我如何让他select最大的?我使用了 MAX
命令和 CROSS JOIN
方法,但我得到了错误的值。 personel_giriscikis table
declare @kartno nvarchar(50);
declare @ilktarih datetime;
declare @sontarih datetime;
declare @devamsizliktablo TABLE(
Tarih datetime,
Giris time,
Cikis time,
Gun nvarchar(50),
Durumu nvarchar(50),
Hesap float,
Vardiya nvarchar(50),
Vardiyagsaat time,
Vardiyacsaat time,
Gecgelme float,
Erkencikma float)
UPDATE @devamsizliktablo SET Giris=p.cikis_saat
FROM dbo.personel_giriscikis AS p
LEFT OUTER JOIN dbo.personel_kartlari AS pk ON pk.id=p.personel_id
LEFT OUTER JOIN dbo.Takvim AS t ON t.tarih=p.tarih
LEFT OUTER JOIN @devamsizliktablo AS d ON d.Tarih=p.tarih
WHERE p.tarih>=@ilktarih AND p.tarih<=@sontarih AND pk.kartno=@kartno AND d.Tarih=p.tarih
首先,你不需要使用LEFT JOIN。您可以使用 GROUP BY 找到最大值,然后进行更新:
;WITH cte_max(Tarih,cikis_saat)
AS
(
SELECT d.Tarih, MAX(p.cikis_saat) AS cikis_saat
FROM dbo.personel_giriscikis AS p
INNER JOIN dbo.personel_kartlari AS pk ON pk.id=p.personel_id
INNER JOIN dbo.Takvim AS t ON t.tarih=p.tarih
INNER JOIN @devamsizliktablo AS d ON d.Tarih=p.tarih
WHERE p.tarih>=@ilktarih AND p.tarih<=@sontarih AND pk.kartno=@kartno
GROUP BY d.Tarih
)
UPDATE d
SET d.Giris=m.cikis_saat
FROM @devamsizliktablo d
INNER JOIN cte_max m
ON m.Tarih=d.Tarih;
我正在使用下面的查询将数据写入临时 table。为此,我使用更新命令。但是,有时 table 中的值可能不止一个,在这种情况下,我的更新查询 select 是第一个值。当多个值出现时,我如何让他select最大的?我使用了 MAX
命令和 CROSS JOIN
方法,但我得到了错误的值。 personel_giriscikis table
declare @kartno nvarchar(50);
declare @ilktarih datetime;
declare @sontarih datetime;
declare @devamsizliktablo TABLE(
Tarih datetime,
Giris time,
Cikis time,
Gun nvarchar(50),
Durumu nvarchar(50),
Hesap float,
Vardiya nvarchar(50),
Vardiyagsaat time,
Vardiyacsaat time,
Gecgelme float,
Erkencikma float)
UPDATE @devamsizliktablo SET Giris=p.cikis_saat
FROM dbo.personel_giriscikis AS p
LEFT OUTER JOIN dbo.personel_kartlari AS pk ON pk.id=p.personel_id
LEFT OUTER JOIN dbo.Takvim AS t ON t.tarih=p.tarih
LEFT OUTER JOIN @devamsizliktablo AS d ON d.Tarih=p.tarih
WHERE p.tarih>=@ilktarih AND p.tarih<=@sontarih AND pk.kartno=@kartno AND d.Tarih=p.tarih
首先,你不需要使用LEFT JOIN。您可以使用 GROUP BY 找到最大值,然后进行更新:
;WITH cte_max(Tarih,cikis_saat)
AS
(
SELECT d.Tarih, MAX(p.cikis_saat) AS cikis_saat
FROM dbo.personel_giriscikis AS p
INNER JOIN dbo.personel_kartlari AS pk ON pk.id=p.personel_id
INNER JOIN dbo.Takvim AS t ON t.tarih=p.tarih
INNER JOIN @devamsizliktablo AS d ON d.Tarih=p.tarih
WHERE p.tarih>=@ilktarih AND p.tarih<=@sontarih AND pk.kartno=@kartno
GROUP BY d.Tarih
)
UPDATE d
SET d.Giris=m.cikis_saat
FROM @devamsizliktablo d
INNER JOIN cte_max m
ON m.Tarih=d.Tarih;