2009-05-21 7 views
2

J'ai table avec des propriétés de certains produits:lignes correspondantes sans filtrage (SQL)

table properties(
    prop_id int, 
    product_id int 
) 

Ma question est: est-il possible de sélectionner les propriétés qui correspondent sans les filtrer du résultat? Par exemple:

select property_id from properties WHERE property_id IN(1,3,5); 

Vous obtenez uniquement des lignes correspondant à 1,3,5. J'ai besoin de toutes les lignes mais avec des informations sur les lignes correspondant à mes critères. Je ne veux pas utiliser 'UNION'.

Merci pour votre aide.

Répondre

1

jointure externe gauche

select 
    parent.name 
     ,child.name 
    from parent 
     left outer join child on parent.familyid=child.familyid 

listera tous les parents, peu importe si elles ont des enfants

+0

Exactement - Merci beaucoup –

+0

commentaire OP dit tout cela, ils ne voulaient pas une instruction CASE –

6

Je n'ai pas d'expérience avec mySQL, mais en supposant qu'il prend en charge une déclaration case (ou quelque chose analogue), vous pouvez le faire:

select 
    prop_id, 
    product_id, 
    (case when prop_id in (1, 3, 5) then 1 else 0 end) as matches_criteria 

from properties 
+0

+1 mySQL prend en charge la déclaration de cas, mais vous devez terminer par « cas de fin ' – northpole

+0

Votre syntaxe pour MySQL me semble bien. Au questionneur: ainsi, avec la syntaxe d'Adam, vous obtenez une nouvelle colonne - si cette colonne est un 1, alors la ligne correspond à vos critères. – artlung

+0

Doh! @birdlips a raison. http://dev.mysql.com/doc/refman/5.0/fr/case-statement.html Je fais un vérificateur de syntaxe terrible. :-) – artlung

0
SELECT 
    IF (property_id IN (1, 3, 5), 1, 0) AS matched 
FROM 
    properties;