我已经写在SQL Server 2005中此查询,但它仍然会显示的是相同的!谢谢产品名称DISTINCT关键字2005
SELECT DISTINCT ProductName
FROM Products,Suppliers
WHERE Products.SupplierID = Suppliers.SupplierID AND Fax IS NULL
比如我有两个产品名称相同的'i'而不是返回一个'che'它将返回他们两个
我已经写在SQL Server 2005中此查询,但它仍然会显示的是相同的!谢谢产品名称DISTINCT关键字2005
SELECT DISTINCT ProductName
FROM Products,Suppliers
WHERE Products.SupplierID = Suppliers.SupplierID AND Fax IS NULL
比如我有两个产品名称相同的'i'而不是返回一个'che'它将返回他们两个
你发布的内容应该可以正常工作。
是否有可能您正在选择其他类似的东西?
SELECT DISTINCT ProductName, ProductId
FROM Products,Suppliers
WHERE Products.SupplierID = Suppliers.SupplierID AND Fax IS NULL
或者,您应该像这样写(但是如果您选择多列,这不会对您有所帮助)。
SELECT DISTINCT ProductName
FROM Products
INNER JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID
WHERE Fax IS NULL
如果你感到困惑,为什么选择多列是行不通的:
SELECT DISTINCT ProductName, ProductId
FROM Products
INNER JOIN Suppliers ON Products.SupplierID = Suppliers.SupplierID
WHERE Fax IS NULL
试想一下一个时刻如下:
Products table:
ID Name
1 Test
2 Test
3 Other
4 Random
你想:
Mixed:
ID Name
4 Random
3 Other
? Test
how shou LD它选择'ID'在独特混合表中的测试?因此,它为您提供了所有您请求的数据的全部DISTINCT组合。
即
Mixed:
ID Name
4 Random
3 Other
2 Test
1 Test
productID是唯一的! – user355002 2010-06-21 04:26:13
在产品表中有时我有3个不同的产品名称与一个supplierID,但每个产品名称都有其自己的产品ID – user355002 2010-06-21 04:27:33
和这些3个产品名称中的某些时间,其中两个彼此相同 – user355002 2010-06-21 04:28:22
选项:
SELECT --DISTINCT if you need RTRIM
P.ProductName --RTRIM(ProductName, '')
FROM
Products P
WHERE
EXISTS (SELECT *
FROM
Suppliers S
WHERE
P.SupplierID = S.SupplierID
AND
Fax IS NULL -- belongs to Suppliers?
)
这是一个有趣的做事方式,但它会优化以及内部连接?这是无关紧要的,因为我非常确定OP正在尝试根据一个DISTINCT选择多个列,但我仍然很好奇。 – 2010-06-21 04:57:40
@格拉辛:通常情况下会更好,因为你不需要DISTINCT。 http://stackoverflow.com/questions/2019958/joins-exists-or-in-which-is-better-few-questions-on-sql/2081909#2081909 http://stackoverflow.com/questions/1001543/in -vs-join-with-large-rowsets/1001578#1001578 http://stackoverflow.com/questions/991934/rewrite-t-sql-from-using-in-to-using-join-where/992338#992338 – gbn 2010-06-21 06:15:51
很好 - 谢谢澄清 – 2010-06-21 06:36:44
给我们的例子请 – gbn 2010-06-21 04:22:16
你是说你有一个“卫生经济研究所”和一个“卫生经济研究所”,和它的返回两者兼而有之?如果是这样,则您安装了一个区分大小写的排序规则。 – Gabe 2010-06-21 04:59:37