SQL WHERE.. IN clause multiple columns

前端 未结 13 1183
死守一世寂寞
死守一世寂寞 2020-11-29 15:56

I need to implement the following query in SQL Server:

select *
from table1
WHERE  (CM_PLAN_ID,Individual_ID)
IN
(
 Select CM_PLAN_ID, Individual_ID
 From CR         


        
相关标签:
13条回答
  • 2020-11-29 16:05

    Query:

    select ord_num, agent_code, ord_date, ord_amount
    from orders
    where (agent_code, ord_amount) IN
    (SELECT agent_code, MIN(ord_amount)
    FROM orders 
    GROUP BY agent_code);
    

    above query worked for me in mysql. refer following link -->

    https://www.w3resource.com/sql/subqueries/multiplee-row-column-subqueries.php

    0 讨论(0)
  • 2020-11-29 16:09
    Postgres SQL  : version 9.6
    Total records on tables : mjr_agent = 145, mjr_transaction_item = 91800
    

    1.Using with EXISTS [Average Query Time : 1.42s]

    SELECT count(txi.id) 
    FROM 
    mjr_transaction_item txi
    WHERE 
    EXISTS ( SELECT 1 FROM mjr_agent agnt WHERE agnt.agent_group = 0 AND (txi.src_id = agnt.code OR txi.dest_id = agnt.code) ) 
    

    2.Using with two lines IN Clause [Average Query Time : 0.37s]

    SELECT count(txi.id) FROM mjr_transaction_item txi
    WHERE 
    txi.src_id IN ( SELECT agnt.code FROM mjr_agent agnt WHERE agnt.agent_group = 0 ) 
    OR txi.dest_id IN ( SELECT agnt.code FROM mjr_agent agnt WHERE agnt.agent_group = 0 )
    

    3.Using with INNNER JOIN pattern [Average Query Time : 2.9s]

    SELECT count(DISTINCT(txi.id)) FROM mjr_transaction_item txi
    INNER JOIN mjr_agent agnt ON agnt.code = txi.src_id OR agnt.code = txi.dest_id
    WHERE 
    agnt.agent_group = 0
    

    So , I choosed second option.

    0 讨论(0)
  • 2020-11-29 16:11

    Simple and wrong way would be combine two columns using + or concatenate and make one columns.

    Select *
    from XX
    where col1+col2 in (Select col1+col2 from YY)
    

    This would be offcourse pretty slow. Can not be used in programming but if in case you are just querying for verifying something may be used.

    0 讨论(0)
  • 2020-11-29 16:12

    I founded easier this way

    Select * 
    from table1 
    WHERE  (convert(VARCHAR,CM_PLAN_ID) + convert(VARCHAR,Individual_ID)) 
    IN 
    (
     Select convert(VARCHAR,CM_PLAN_ID) + convert(VARCHAR,Individual_ID)
     From CRM_VCM_CURRENT_LEAD_STATUS 
     Where Lead_Key = :_Lead_Key 
    ) 
    

    Hope this help :)

    0 讨论(0)
  • 2020-11-29 16:14

    You can make a derived table from the subquery, and join table1 to this derived table:

    select * from table1 LEFT JOIN 
    (
       Select CM_PLAN_ID, Individual_ID
       From CRM_VCM_CURRENT_LEAD_STATUS
       Where Lead_Key = :_Lead_Key
    ) table2
    ON 
       table1.CM_PLAN_ID=table2.CM_PLAN_ID
       AND table1.Individual=table2.Individual
    WHERE table2.CM_PLAN_ID IS NOT NULL
    
    0 讨论(0)
  • 2020-11-29 16:16
    select * from tab1 where (col1,col2) in (select col1,col2 from tab2)
    

    Note:
    Oracle ignores rows where one or more of the selected columns is NULL. In these cases you probably want to make use of the NVL-Funktion to map NULL to a special value (that should not be in the values);

    select * from tab1
    where (col1, NVL(col2, '---') in (select col1, NVL(col2, '---') from tab2)
    
    0 讨论(0)
提交回复
热议问题