简体   繁体   English

sql查询将多个过滤器应用于多个表

[英]sql query applying multiple filters to multiple tables

I am inexperienced in SQL, need a query applying multi-layer filters to multiple tables for comparison purposes. 我对SQL没有经验,需要一个查询将多层过滤器应用于多个表以进行比较。

Table1: 表格1:

Order_Number Step_Name Data Parameter_Name 订单编号步骤名称数据参数名称
12 step4 const1 P1 12 step4 const1 P1
12 step4 const2 P2 12 step4 const2 P2
12 step4 value1 P3 12 step4 value1 P3
30 step6 const3 P1 30步骤6 const3 P1
30 step6 const4 P2 30步骤6 const4 P2
30 step6 value2 P3 30 step6 value2 P3

All tables have same format, only different in data values. 所有表都具有相同的格式,只是数据值不同。 Order numbers might be different from table to table. 表格之间的订单号可能会有所不同。

I want to do: 我想要做:

  1. Search rows between Step_Name=step1 and step8 only 仅搜索Step_Name = step1和step8之间的行
  2. Find Order_Number matching (P1=const1 and P2=const2) 查找Order_Number匹配(P1 = const1和P2 = const2)
  3. Save P3 rows in the same order number group. 将P3行保存在相同的订单号组中。
  4. Display all the rows (one from each table): 显示所有行(每个表一个):

Order_Number Table Data Parameter_Name 订单编号表数据参数名称
12 table1 value1 P3 12表1值1 P3
12 table2 value2 P3 12表2值2 P3
14 table3 value3 P3 14表3值3 P3

Your help is greatly appreciated! 非常感谢您的帮助!

You'll need to add as many union all...select parts as necessary: 您需要添加union all...select根据需要union all...select零件:

select
    order_number,
    'table1' as `table`,
    data,
    prameter_name
from
    table1 t1p3
where
    step_name in ('step1', 'step2', 'step3', 'step4', 'step5', 'step6', 'step7', 'step8') and
    parameter = 'p3' and
    exists (
        select
            'x'
        from
            table1 t1p1
        where
            t1p1.order_number = t1p3.order_number and
            t1p1.step_name = t1p3.step_name and
            t1p1.parameter = 'p1' and
            t1p1.data = 'const1'
    ) and exists (
        select
            'x'
        from
            table1 t1p2
        where
            t1p2.order_number = t1p3.order_number and
            t1p2.step_name = t1p3.step_name and
            t1p2.parameter = 'p2' and
            t1p2.data = 'const2'
    ) 
union all
select
    order_number,
    'table2',
    data,
    prameter_name
from
    table2 t2p3
where
    step_name in ('step1', 'step2', 'step3', 'step4', 'step5', 'step6', 'step7', 'step8') and
    parameter = 'p3' and
    exists (
        select
              'x'
        from
            table2 t2p1
        where
            t2p1.order_number = t2p3.order_number and
            t2p1.step_name = t2p3.step_name and
            t2p1.parameter = 'p1' and
            t2p1.data = 'const1'
    ) and exists (
        select
            'x'
        from
            table2 t2p2
        where
            t2p2.order_number = t2p3.order_number and
            t2p2.step_name = t2p3.step_name and
            t2p2.parameter = 'p2' and
            t2p2.data = 'const2'
    )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM