2013-10-02 4 views
1

J'ai deux tables dont j'ai besoin d'utiliser une clause where. Tableau 1SQL où valeurs nulles

CustomerID  Product 
1    Car 
2    Table 
3    Golf 
4    Foo 
5    Yoo 

Tableau 2

CustomeID  Comment 
2    Three items 
3    Returned 
4    Complaint 

J'ai une requête qui a deux filtres dans la déclaration où comme celui-ci

Select * from table1 a left 
join table2 b on a.customerid= b.customerid 
where b.comment<>'Returned' and b.comment not like 'Three%' 

Quand je courais la requête que je viens de recevoir un enregistrement. Je veux revenir aussi les deux customerId de qui ne sont pas table2 (trois dossiers)

+0

Vous essayez donc de filtrer en fonction d'une condition "WHERE", mais vous souhaitez également renvoyer ceux que vous filtrez? Quel serait votre résultat attendu dans un format tabulaire? –

Répondre

0

Essayez:

SELECT * 
FROM table1 a 
    LEFT JOIN table2 b on a.customerid= b.customerid 
WHERE (b.comment<>'Returned' and b.comment not like 'Three%') 
     OR (b.customerid is NULL) 
0

Je pense que vous devez utiliser LEFT OUTER JOIN:

Select * from table1 a left outer join table2 b on a.customerid = b.customerid where b.comment<>'Returned' and b.comment not like 'Three%' 
0

Je habituellement ont tendance à ne pas se joindre à cela.

SELECT --It's a good practice to enumerate all rows you need, not just *. 
    T1.CUSTOMERID, 
    T1.PRODUCT 
FROM 
    TABLE1 T1 
WHERE 
    T1.CUSTOMERID NOT IN (
     SELECT 
     T2.CUSTOMERID 
     FROM 
     TABLE2 T2 
     WHERE 
     T2.COMMENT !='Returned' AND 
     T2.COMMENT not like 'Three%') 
1
SELECT * FROM Table1 A 
LEFT JOIN Table2 B 
ON A.CustomerID=B.CustomeID  
WHERE (B.COMMENT<>'RETURNED' AND B.COMMENT NOT LIKE 'THREE%') 
OR B.CustomeID IS NULL 

Cela devrait fonctionner je suppose.