Eh bien, vous pouvez simplement l'union entre eux mais, puisque l'un est un sous-ensemble de l'autre, ce n'est pas strictement nécessaire:
select * from tablename
where name = 'A' and password = 'A' and id = 'A'
union select * from tablename
where name = 'A' or password = 'A' or id = 'A'
Cela vous donnera exactement les mêmes résultats que si vous venez courir la deuxième requête sur son propre. Cela aura du sens une fois que vous vous rendrez compte que chaque ligne de la première requête a un name
égal à 'A'
, donc il va correspondre à la première partie de la clause where
dans la deuxième requête.
Si vous souhaitez dupliquer des lignes pour celles retournées dans les deux requêtes, utilisez simplement union all
au lieu de union
.
Si vous utilisiez 'A'
comme espace réservé et que ses valeurs sont différentes dans les deux requêtes, vous avez deux approches. Utilisez une construction comme:
... where (name = 'A' and password = 'B' and id = 'C')
or name = 'D' or password = 'E' or id = 'F'
ou utiliser la solution union
j'ai donné ci-dessus, quelque chose comme:
select * from tablename
where name = 'A' and password = 'B' and id = 'C'
union select * from tablename
where name = 'D' or password = 'E' or id = 'F'
(utilisation union all
lorsque vous savez il n'y a pas possibilité de doublons entre les deux requêtes, - il sauvera le SGBD de la difficulté de supprimer les doublons inexistants - ce n'est pas le cas avec ces requêtes).
Le union
peut donner de meilleures performances sur un SGBD qui peut ruche au large des deux sélections plus facilement aux moteurs de requêtes distincts (ce qui serait plus difficile avec une seule requête avec un complexe où l'article). Bien sûr, comme toutes les optimisations, mesurer, ne pas deviner.
Les requêtes sont identiques. * confus * – thomasfedb