【发布时间】:2017-03-27 23:51:14
【问题描述】:
这是对我遇到的问题的简化,但使用此示例我想获取给定客户的所有产品记录。 给客户可能有很多订单,有些订单可能是同一产品我不想拉回重复的产品。 产品表上还有一个复合键。
在理想情况下,这很简单,下面的 Query 就可以完成这项工作。但是,由于该表包含一个 nText 列,SQL Server 抱怨“ntext 数据类型不能选择为 DISTINCT,因为它不可比较。”
SELECT distinct p.idA, p.idB, p.descriptionNTEXT
FROM p product, o order, c customer
WHERE o.productID = p.idA AND o.subProductID = p.idB AND o.customerID = c.ID
我想将其重新构建为类似
SELECT p1.idA, p1.idB, p1.descriptionNTEXT
FROM p1 product
WHERE (p1.idA, p1.idB) IN
(
SELECT p.idA, p.idB
FROM p product, o order, c customer
WHERE o.productID = p.idA AND o.subProductID = p.idB AND o.customerID = c.ID
)
见How do I (or can I) SELECT DISTINCT on multiple columns?
但是这种方法在 SQL Server 上不起作用
有什么想法吗?
理想情况下,我需要一个可移植的解决方案,至少可以在 SQLServer、MySQL 和 Oracle 上运行。但是 DB 特定的解决方案总比没有好!
以下数据大致显示了我想要的。
Customer
ID name
1 Fred
Order
ID CustomerID productID subProductID
10 1 100 200
11 1 100 200
12 1 100 200
13 1 101 201
Product
IDA IDB descriptionNTEXT
100 200 'product 1'
101 201 'product 2'
102 203 'product 3'
Expected Result
IDA IDB descriptionNTEXT
100 200 'product 1'
101 201 'product 2'
【问题讨论】:
-
添加一些示例表数据和预期结果 - 以及格式化文本。
标签: sql sql-server select distinct composite-primary-key