仅当所有记录都匹配时才加入 SQL [英] SQL Join only if all records have a match

查看:29
本文介绍了仅当所有记录都匹配时才加入 SQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 3 张桌子:

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

每个 idOrder 可以有多个 idCartRow.

There can be multiple idCartRows per idOrder.

我想获取 CP_shipping 中存在 all idCartRows 的所有订单.这看起来应该很简单,但我在网上没有找到太多.

I want to get all orders where all its idCartRows exist in CP_shipping. This seems like it should be simple, but I haven't found much on the web.

这是我现在的查询:

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

推荐答案

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

Your query is returning rows from "s" and not the orders. Based on your question, I came up with this query:

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 语句中的子查询正在获取所有购物车正在发货的订单.

The subquery in the in statement is getting orders all of whose cartrows are in shipping.

这篇关于仅当所有记录都匹配时才加入 SQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆