mysql:multi tables-one-to-many relationship,get子列之一不为null的列

5uzkadbs  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(407)

我需要帮助创建sql查询。
我要获取所有其child的resu id都不为空的订单。
在下面的示例中,您将看到
order_audit.order_id W1 一对多关系
temp_order_id W1_1 以及 W1_2 . 这个 temp_order_id 进一步
res_id 12 以及 32 . 这个命令 W1 应该是回应。
万一 W2 你可以看到 W2_1
resp_id null . 所以这个不应该拉。 order_audit+----+----------+ | id | order_id | +----+----------+ | 1 | W1 | | 2 | W2 | | 2 | W3 | +----+----------+order_mapping+----------+---------------+ | order_id | temp_order_id | +----------+---------------+ | W1 | W1_1 | | W1 | W1_2 | | W2 | W2_1 | | W2 | W2_2 | | W3 | W3_1 | +----------+---------------+temp_order_table ```
+---------------+--------+
| temp_order_id | res_id |
+---------------+--------+
| W1_1 | 12 |
| W1_2 | 32 |
| W2_1 | null |
| W2_2 | 33 |
| W3_1 | null |
+---------------+--------+

从你的截图上看,似乎有一个领先的空间 `Account` (也许还有后面的)。
任何帮助都将不胜感激
ubby3x7f

ubby3x7f1#

我会用 group by 以及 having :

select om.order_id
from order_mapping om left join
     temp_order_table tot
     on om.temp_order_id = tot.temp_order_id
group by om.order_id
having count(tot.temp_order_id) = count(tot.res_id);
2izufjch

2izufjch2#

你可以用一个不在为空的顺序

select oa.order_id 
  from order_audit oa
  where oa.order_id NOT IN (

        select om.order_id 
        from order_mapping om
        inner join (
        select to.temp_order_id 
        from temp_order_table to 
        where to.res_id is null 
        ) t on t.temp_order_id = om.temp_order_id
  )
edqdpe6u

edqdpe6u3#

您可以自然地联接所有其他2个表,并检查res\u id是否为null。

select oa.id, oa.order_id from order_audit oa
  where not exists (
    select * from order_mapping om
    join temp_order_table tot on
    tot.temp_order_id = om.temp_order_id
    where om.order_id = oa.order_id and tot.res_id is null
  )

这里是sqlfiddle链接的链接

相关问题