该架构有点奇怪。我有两个表:SQL - 生成一个最便宜的选项列表
CREATE TABLE [dbo].[Events](
[Id] [int] NOT NULL,
[Name] [varchar](50) NOT NULL,
[VenueId] [int] NULL
)
CREATE TABLE [dbo].[Venues](
[Id] [int] NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[AveragePrice] [int] NOT NULL
)
和数据是这样的:
insert into Venues (Id, Name, AveragePrice) VALUES
(1, 'Arena1', 100),
(1, 'Arena2', 200),
(1, 'Arena3', 50),
(2, 'Club1', 50),
(2, 'Club2', 150)
insert into Events (Id, Name, VenueId) VALUES
(1, 'ConsertAtArena1', 1),
(2, 'ConsertAtArena2', 1),
(3, 'ConsertAtArena3', 1),
(2, 'Conference', NULL)
我需要制作:'ConsertAtArena3', 'Conference'
。对于具有相同VenueId的事件以及具有NULL VenueId的所有事件,这是最便宜的Venue选项。表格非常庞大,高达几百万行。什么是有效的SELECT来做到这一点?
数据库是SQL Server 2012 Standard。
添加预期的结果也是如此。 – jarlh
您只需要执行计划即可查看查询成本! – Ragul
ConsertAtArena3是最便宜的*?所有三场音乐会都有相同的'venueId'参考,因此它们都具有相同的价格。 –