SQL仅在所有记录都匹配时才加入

时间:2013-01-03 16:19:55

标签: sql sql-server tsql

我有3张桌子:

  • CP_carthead(idOrder)
  • CP_cartrows(idOrder,idCartRow)
  • CP_shipping(idCartRow,idShipping,dateShipped)

每个idOrder可以有多个idCartRows。

我希望在CP_shipping中获得所有其idCartRows存在的所有订单。这似乎应该很简单,但我还没有在网上找到太多。

现在我的查询:

SELECT
    s.idOrder
    , s.LatestDateShipped
FROM
    CP_carthead o
    LEFT OUTER JOIN (
                        SELECT
                            MAX(s.dateShipped) [LatestDateShipped]
                            , r.idOrder
                        FROM
                            CP_shipping s
                            LEFT OUTER JOIN CP_cartrows r ON s.idCartRow = r.idCartRow
                        GROUP BY
                            r.idOrder               
                    ) s ON o.idOrder = s.idOrder

1 个答案:

答案 0 :(得分:2)

您的查询是从“s”而不是订单返回行。根据您的问题,我想出了这个问题:

select o.*
from CP_Carthead o
where o.orderId in (select cr.idOrder
                    from cp_cartrows cr left outer join
                         cp_shipping s
                         on cr.idCartRow = s.IdCartrow  
                    group by cr.idOrder
                    having count(s.idCartRow) = COUNT(*)
                   )

in声明中的子查询正在获取其所有纸箱中的订单。