0

我有 2 个表 1 个产品和 1 个变体表。一个产品可以有 1 个或多个变体。我正在尝试构建一个查询来选择每个产品名称及其价格。价格不是存储在产品表中,而是存储在变体表中。每个变体的价格相同,即产品的价格。这些是表格:

USE [test]
GO
CREATE TABLE [dbo].[variants](
    [variantid] [int] NOT NULL,
    [productid] [int] NOT NULL,
    [price] [decimal](18, 0) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[variants] ([variantid], [productid], [price]) VALUES (1, 1, CAST(10 AS Decimal(18, 0)))
INSERT [dbo].[variants] ([variantid], [productid], [price]) VALUES (2, 1, CAST(10 AS Decimal(18, 0)))
INSERT [dbo].[variants] ([variantid], [productid], [price]) VALUES (3, 2, CAST(12 AS Decimal(18, 0)))
INSERT [dbo].[variants] ([variantid], [productid], [price]) VALUES (3, 2, CAST(2 AS Decimal(18, 0)))

CREATE TABLE [dbo].[products](
    [productid] [int] NOT NULL,
    [name] [varchar](50) NULL
) ON [PRIMARY]
GO

INSERT [dbo].[products] ([productid], [name]) VALUES (1, N'glove')
INSERT [dbo].[products] ([productid], [name]) VALUES (2, N'tie')
INSERT [dbo].[products] ([productid], [name]) VALUES (3, N'pants')

我试图这样查询它:

select v.price,p.name,* from dbo.products p
join variants v on v.productid=p.productid
where p.productid=1

但随后它返回 productid=1 的所有变体,我如何从仅 1 个变体中“提取”价格以在我的查询中列出此价格,以便它只返回 productid=1 的 1 行?

4

1 回答 1

2

如果v.price总是相同,那么你可以GROUP通过它:

select v.price, p.name from dbo.products p
join variants v on v.productid=p.productid
where p.productid=1
group by v.price, p.name

您在SELECT子句中选择的每个字段都必须包含在GROUP BY或聚合(MINAVG等)中。

于 2013-06-11T06:03:57.103 回答