【问题标题】:DISTINCT keyword in SQL server 2005SQL Server 2005 中的 DISTINCT 关键字
【发布时间】:2011-03-06 03:44:27
【问题描述】:

我已经在 sql server 2005 中编写了这个查询,但它仍然会显示相同的产品名称!!谢谢

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

例如,我有两个相同的“Chei”产品名称,而不是返回一个“chei”,它将返回它们两个

【问题讨论】:

  • 你是说你有一个'Chei'和一个'chei',并且它都返回了?如果是这样,您安装了区分大小写的排序规则。

标签: sql-server-2005


【解决方案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

它应该如何在 Distinct 混合表中为 Test 选择“id”? 因此,它为您提供了您所要求的所有数据的所有 DISTINCT 组合。

Mixed:
ID  Name
4   Random
3   Other
2   Test
1   Test

【讨论】:

  • 有时在产品表中我有 3 个不同的产品名称和一个供应商 ID,但每个产品名称都有自己的产品 ID
  • 有时这三个产品名称中的两个是相同的
  • DISTINCT 不是按字段而是按行。所以“DISTINCT(productName) productid”是两者的所有 DISTINCT 组合(所以如果 productid 不同,你会得到两行),而不仅仅是 DISTINCT productNames
【解决方案2】:
  • 如果使用 EXISTS,则不需要 DISTINCT
  • ANSI PADDING 表示您可能有尾随空格:但为什么 ProductName 会重复?
  • 您的帖子是实际查询吗?
  • 使用正确的 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?
             )

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 1970-01-01
相关资源
最近更新 更多