2010-06-21 77 views
0

我已经写在SQL Server 2005中此查询,但它仍然会显示的是相同的!谢谢产品名称DISTINCT关键字2005

SELECT DISTINCT ProductName 
FROM Products,Suppliers 
WHERE Products.SupplierID = Suppliers.SupplierID AND Fax IS NULL 

比如我有两个产品名称相同的'i'而不是返回一个'che'它将返回他们两个

+1

给我们的例子请 – gbn 2010-06-21 04:22:16

+2

你是说你有一个“卫生经济研究所”和一个“卫生经济研究所”,和它的返回两者兼而有之?如果是这样,则您安装了一个区分大小写的排序规则。 – Gabe 2010-06-21 04:59:37

回答

1

你发布的内容应该可以正常工作。

是否有可能您正在选择其他类似的东西?

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 
+0

productID是唯一的! – user355002 2010-06-21 04:26:13

+0

在产品表中有时我有3个不同的产品名称与一个supplierID,但每个产品名称都有其自己的产品ID – user355002 2010-06-21 04:27:33

+0

和这些3个产品名称中的某些时间,其中两个彼此相同 – user355002 2010-06-21 04:28:22

1
  • 如果使用EXISTS,你不应该需要DISTINCT
  • ANSI PADDING意味着你可能有尾随空格:但为什么产品名称重复?
  • 是你的发贴实际查询?
  • 使用正确的JOIN语法

选项:

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? 
      ) 
+0

这是一个有趣的做事方式,但它会优化以及内部连接?这是无关紧要的,因为我非常确定OP正在尝试根据一个DISTINCT选择多个列,但我仍然很好奇。 – 2010-06-21 04:57:40

+0

@格拉辛:通常情况下会更好,因为你不需要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

+0

很好 - 谢谢澄清 – 2010-06-21 06:36:44