这是我对问题的简化,但是使用这个例子我想获得给定客户的所有产品记录。 给客户可能有很多订单和一些订单可能是针对同一个产品我不想拉回重复的产品。 产品表上还有一个组合键。SELECT DISTINCT with composite key
在一个理想的世界中,这很简单,下面的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服务器
任何想法上运行?
理想情况下,我需要一个可移植的解决方案,至少可以在SQLServer上工作,Oracle &。但数据库特定解决方案总比没有好!
以下数据大致显示了我想要的。
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'
添加一些示例表数据和预期的结果 - 以及格式化文本。 – jarlh