2013-01-03 53 views
4

我有3個表:SQL加入只有當所有記錄都匹配

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

每個idOrder可以有多個idCartRows。

我想獲得所有訂單,其中全部它的idCartRows存在於CP_shipping中。這看起來應該很簡單,但我在網上找不到太多。

這裏是我的查詢現在:

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

從查看查詢爲什麼不使用子查詢並刪除外部?並將'left join'改爲'CP_cartrows'爲'inner join' – Magnus

回答

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語句中的子查詢接到命令其所有cartrows都在出貨。

+0

他只從加入的子查詢中選擇值,只有你的'CP_Carthead' – Magnus

+0

@Magnus。 。 。我知道。我正在回答這個問題(「我想獲得訂單......」),而不是複製查詢。 –

+0

這對我有用。我的查詢現在看起來是一樣的 - 我剛剛添加了where子句。有沒有更好的方法來實現這種方法? – Rivka

相關問題