SQL查询连接多个表以满足所有条件或没有任何回报

时间:2017-05-25 02:38:41

标签: mysql sql

我有我的查询的场景和结果集。我需要使用特定条件过滤结果集。

查询我:

SELECT 
ord_no,parent_item,child_item,status

FROM **TABLE1** WHERE parent_item IN ('ITEM1') AND ord_no IN ('12345','34567','67854')

UNION ALL

SELECT 
ord_no,parent_item,child_item,status

FROM **TABLE2** WHERE parent_item IN ('ITEM2') AND ord_no IN ('12345','34567','67854')

UNION ALL

SELECT 
ord_no,parent_item,child_item,status

FROM **TABLE3** WHERE parent_item IN ('ITEM3') AND ord_no IN ('12345','34567','67854')

查询返回这样的结果,我正在寻找的预期结果是只返回所有child_items处于COMPLETE状态的特定order_no。

查询结果:

ord_no parent_item child_item status
12345   item1   childA  complete
12345   item1   childB  complete
12345   item2   childC  complete
12345   item2   childD  incomplete
12345   item3   childE  incomplete
12345   item3   childF  complete

34567   item1   childA  complete
34567   item1   childB  complete
34567   item2   childC  complete
34567   item2   childD  complete
34567   item3   childE  complete
34567   item3   childF  complete

67854   item1   childA  incomplete
67854   item1   childB  incomplete
67854   item2   childC  complete
67854   item2   childD  complete
67854   item3   childE  incomplete
67854   item3   childF  incomplete

预期结果:

我无法弄清楚如何实现这一点。对此的任何帮助将不胜感激。

ord_no parent_item child_item status

34567   item1   childA  complete
34567   item1   childB  complete
34567   item2   childC  complete
34567   item2   childD  complete
34567   item3   childE  complete
34567   item3   childF  complete

1 个答案:

答案 0 :(得分:0)

您可以从现有查询中create a view来避免长表达式并将其用于子查询。

SELECT *
FROM MyView 
WHERE ord_no NOT IN
  (SELECT ord_no
  FROM MyView
  WHERE status <> 'complete');
相关问题