J'ai donc une table comme celle-ci:
|---group---|---property---|---value---| | a | prop1 | yes | | a | prop2 | yes | | a | prop3 | no | | b | prop1 | yes | | b | prop2 | no | | b | prop3 | no | | c | prop1 | no | | c | prop2 | no | | c | prop3 | no |
4 Réponses :
Vous pouvez utiliser une sous-requête pour choisir la liste des groupes de valeur code> = 'prop1' et valeur code> = "oui". Ensuite, sélectionnez Tous les enregistrements de la liste des groupes comme ci-dessous- ....
WHERE
(
`Property` = 'prop1'
AND `Value` = 'Yes'
)
AND -- You can also use OR here if you need rows if any of the condition is true
(
`Property` = 'prop3'
AND `Value` = 'No'
)
Cela fonctionne, mais si je veux combiner plusieurs propriétés différentes? Par exemple, si je veux prop1 code> pour être oui code> et prop3 code> pour être non code>?
Vous pouvez ajouter plus de conditions en sous-requête selon la condition requise.
Ajout de code d'échantillon pour combiner plusieurs propriétés différentes.
Une seule propriété est simple
Vous pouvez utiliser Exist:
select t.* from tablename t
where exists (
select 1 from tablename
where `group` = t.`group`
and (
(property = 'prop1' and `value` = 'yes')
or
(property = 'prop2' and `value` = 'no')
)
)
Juste FYI, vous pouvez également écrire ceci (bien que cela puisse avoir une capacité plus limitée à utiliser des index ...
SELECT * FROM my_table WHERE(x,y) IN((1,'yes'),(2,'no'),(3,'maybe'));
Spécifiez également le résultat attendu.
Sélectionnez `Group` à partir de` Tablename` où `Property` = 'Prop1' et` Value` = 'Oui' Code>?où la propriété = 'prop1' et valeur = 'oui' code>? Sinon faire comme @jarlh a dit.