2010-06-21 58 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

相關問題