简体   繁体   中英

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.

Table1:

Order_Number Step_Name Data Parameter_Name
12 step4 const1 P1
12 step4 const2 P2
12 step4 value1 P3
30 step6 const3 P1
30 step6 const4 P2
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
  2. Find Order_Number matching (P1=const1 and P2=const2)
  3. Save P3 rows in the same order number group.
  4. Display all the rows (one from each table):

Order_Number Table Data Parameter_Name
12 table1 value1 P3
12 table2 value2 P3
14 table3 value3 P3

Your help is greatly appreciated!

You'll need to add as many union all...select parts as necessary:

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'
    )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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