【问题标题】:Syntax to update column value based on values in related table根据相关表中的值更新列值的语法
【发布时间】:2023-02-22 02:42:00
【问题描述】:

有人可以帮我解决这个问题吗?

我有下面显示的两个表。一个RailcarTrips可以有多个TripSegments

我想将 RailcarTrips.Arrived 设置为 true,对于没有相关 TripSegmentsEndDate 设置为 NULL 的所有行。

我不知道如何构造 WHERE 子句。

CREATE TABLE [dbo].[TripSegments](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [RailcarTripId] [int] NOT NULL,
    [StartDate] [datetime2](7) NOT NULL,
    [EndDate] [datetime2](7) NULL,
 CONSTRAINT [PK_TripSegments] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[RailcarTrips](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [DestinationCity] [nvarchar](80) NOT NULL,
    [DestinationState] [nvarchar](2) NOT NULL,
    [ReturnReleaseDate] [datetime2](7) NULL,
    [PurchaseOrder] [nvarchar](80) NULL,
    [Arrived] [bit] NOT NULL,
 CONSTRAINT [PK_RailcarTrips] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    这是你指定的 请注意,即使给定 RailcarTrip 在 TripSegment 中没有记录,此查询也会将 RailcarTrips 更新为“已到达”

    UPDATE RailcarTrips
    SET Arrived = 'true'
    WHERE Id in
    (SELECT id FROM RailcarTrips r
    WHERE NOT EXISTS
    (SELECT * FROM TripSegment t
    WHERE
    t.RailcarTripId = r.Id
    AND t.EndDate IS NULL
    )
    )
    

    如果要检查是否存在至少 1 个带有 EndDate 的 TripSegment,请使用此

    UPDATE RailcarTrips
    SET Arrived = 'true'
    WHERE Id in
    (SELECT id FROM RailcarTrips r
    WHERE NOT EXISTS
    (SELECT * FROM TripSegment t1
    WHERE
    t1.RailcarTripId = r.Id
    AND t1.EndDate IS NULL
    )
    AND EXISTS
    (SELECT * FROM TripSegment t2
    WHERE
    t2.RailcarTripId = r.Id
    AND NOT t2.EndDate IS NULL) 
    )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多