0
votes

Comment obtenir deux valeurs d'une sous-requête à utiliser dans la clause de SQL où

Je dois utiliser deux valeurs dans la clause WHERE à tester pour l'égalité de deux valeurs obtenues à partir d'une sous-requête. Depuis que je travaille sur une application existante, je veux le garder comme une sous-requête. Ce qui suit est ma requête.

SELECT 
    o.EMAIL_ADDRESS, c.FIRST_NAME, p.PARTY_ID
FROM 
    ORDER o WITH (NOLOCK) 
INNER JOIN  
    PARTY p WITH (NOLOCK) ON o.ORDER_ID = p.PARTY_ID 
INNER JOIN 
    CUSTOMER c WITH (NOLOCK) ON p.PARTY_ID = c.CUSTOMER_ID 
WHERE 
    (o.EMAIL_ADDRESS, c.CUSTOMER_ID) IN (SELECT EMAIL_ADDRESS, CUSTOMER_ID 
                                         FROM CUSTOMER_MASTER 
                                         WHERE insert_date > '01/02/2019')


0 commentaires

3 Réponses :


2
votes

Une méthode est avec Existe code> et une sous-requête corrélée.

SELECT o.EMAIL_ADDRESS, c.FIRST_NAME, p.PARTY_ID
FROM ORDER_HEADER oh  WITH (NOLOCK) 
INNER JOIN  PARTY p WITH (NOLOCK) ON o.ORDER_ID = p.PARTY_ID 
INNER JOIN CUSTOMER c WITH (NOLOCK) ON p.PARTY_ID = c.CUSTOMER_ID 
WHERE EXISTS(
    SELECT 1
    FROM CUSTOMER_MASTER AS cm
    WHERE cm.insert_date > '01/02/2019'
    AND o.EMAIL_ADDRESS = cm.EMAIL_ADDRESS
    AND c.CUSTOMER_ID = cm.c.CUSTOMER_ID
    );


0 commentaires

0
votes

dans code> permet uniquement une liste de colonnes unique. Donc créer em> colonne unique.

SELECT o.EMAIL_ADDRESS, c.FIRST_NAME, p.PARTY_ID
FROM ORDER o  WITH (NOLOCK) 
INNER JOIN  PARTY p WITH (NOLOCK) ON o.ORDER_ID = p.PARTY_ID 
INNER JOIN CUSTOMER c WITH (NOLOCK) ON p.PARTY_ID = c.CUSTOMER_ID 
WHERE o.EMAIL_ADDRESS + cast(c.CUSTOMER_ID as varchar) 
IN (select EMAIL_ADDRESS + cast(CUSTOMER_ID as varchar)
from CUSTOMER_MASTER where insert_date > '01/02/2019')


0 commentaires

0
votes

Utiliser existe . Je conseillerais également de corriger le format de la date: xxx

Votre date de la date doit être au format yyyymmdd.

basé sur votre logique, je ne pense pas que vous ne pensez pas que vous besoin de tous les rejoindre s: xxx

la table la partie ne semble pas nécessaire, car les commandes peuvent aligner directement aux clients.


0 commentaires