通过连接两个表获取唯一值,其中一个表可能具有特定列的重复值

时间:2015-01-29 06:25:08

标签: sql

这是我第一次涉足SQL。

我有两张桌子Order& OrderItem的。 Order的OrderID为PK,在OrderItem中为FK。

现在OrderItem有' ProductName'这个专栏让我想到了这个问题。

我需要将所有产品(具体名称)放在两个日期之间。 Order表中包含&​​#39; CreatedDate'列。

给定订单可以多次拥有相同的产品。 所以当你这样做时:

SELECT * FROM OrderItem
WHERE OrderID=40861

结果集可能会返回5行,所有这些行在" ProductName'中都有相同的值。列。

我写了这个查询:

SELECT Order.OrderID OrderID, OrderItem.ProductName ProductName From Order
    INNER JOIN OrderItem ON Order.OrderID = OrderItem.OrderID
WHERE Order.CreatedDate between '2012-02-27' AND '2014-10-08'

结果有多行具有相同的' ProductName'值。

所以问题是我如何编写查询以返回结果集只有一行订单,尽管订单可能有多个相同产品的数量?

提前致谢。

1 个答案:

答案 0 :(得分:0)

为了获得独特的结果,您有两种方式:

  1. 使用DISTINCT关键字:

    SELECT DISTINCT Order.OrderID OrderID, OrderItem.ProductName ProductName From Order INNER JOIN OrderItem ON Order.OrderID = OrderItem.OrderID WHERE Order.CreatedDate between '2012-02-27' AND '2014-10-08'

  2. 小组结果:

    SELECT Order.OrderID OrderID, OrderItem.ProductName ProductName From Order INNER JOIN OrderItem ON Order.OrderID = OrderItem.OrderID WHERE Order.CreatedDate between '2012-02-27' AND '2014-10-08' Group By Order.OrderID, OrderItem.ProductName

  3. 编辑:实际上可能有更多的方式像UNION,但它是丑陋的,并不是更好的方式这样做:

    `SELECT Order.OrderID OrderID, OrderItem.ProductName ProductName From Order
        INNER JOIN OrderItem ON Order.OrderID = OrderItem.OrderID
    WHERE Order.CreatedDate between '2012-02-27' AND '2014-10-08'`
    

    UNION

    `SELECT Order.OrderID OrderID, OrderItem.ProductName ProductName From Order
        INNER JOIN OrderItem ON Order.OrderID = OrderItem.OrderID
    WHERE Order.CreatedDate between '2012-02-27' AND '2014-10-08'`