7
votes

Est-il possible de comparer * les tuples * dans la clause de «Où» d'une requête SQL?

est-il possible de comparer tuples (merci, a_horse_with_no_name) dans le clause d'une requête SQL? De cette façon, je pourrais convertir ceci: xxx

dans quelque chose de similaire à celui-ci: xxx


2 commentaires

Avez-vous essayé d'exécuter du code similaire avec vos noms de table vrais et noms de colonne? Cela a-t-il fonctionné? Quel message avez-vous eu?


BTW: Vous voulez dire "tuples" pas "tables" dans votre sujet


4 Réponses :


5
votes

écrire xxx

est certainement possible. Au moins avec Oracle et PostgreSQL

Si vous n'êtes pas sûr si la sous-sélection renvoie plus d'une ligne, vous pouvez même modifier le = sur dans dans dans


2 commentaires

Je suis totalement certain que la sous-sélection renvoie une ligne. Il retourne juste plus d'une colonne ... et j'utilise SQL Server. : S


Je n'utilise pas SQL Server, vous devrez donc essayer si cela est pris en charge.



5
votes

Ce que vous recherchez est une jointure intérieure: xxx


1 commentaires

Je sais ce que rejoindre interne est. Mais je l'aime mieux quand il n'y a qu'une seule table par requête, car cette façon, je peux suivre plus facilement la logique qui m'a conduit à écrire cette requête. En outre, je n'extrait pas les données de lathermertables .



2
votes

On dirait que vous essayez de comparer enregistrements pas tables ici. Et en fait, vous comparez résultats des requêtes.

Il est totalement possible avec Oracle et MySQL. La requête suivante est valide et fait le travail: xxx

Il comparera les champs une contre une et renvoyer 1 si elles correspondent toutes (ou 0 s'ils ne font pas). Si les sous-requêtes renvoient plus d'une ligne, elle augmentera une erreur SQL. Cette expression peut également être utilisée ailleurs comme dans les clauses.

Mise à jour pour PostgreSQL

Comme @tsionyx a signalé, dans PostgreSQL Une sous-requête ne peut pas renvoyer plusieurs colonnes. Il est réalisable retourner une ligne de valeur Type: xxx


1 commentaires

Non valide pour Postgres: Sélectionnez (Sélectionnez 1, 2) = (Sélectionnez 1,2); Erreur: la sous-requête ne doit renvoyer qu'une seule colonne; Sélectionnez (Sélectionnez la ligne (1, 2)) = (Sélectionnez la ligne (1,2)); est le valide



1
votes

La réponse de Goran vous semble préférable et j'ai voté pour cela. Juste pour ajouter une autre option, puisque vous utilisez SQL Server, un moyen flexible de saisir plusieurs colonnes à partir de sous-requêtes est externe . Vous pouvez comparer deux valeurs (un tuple) comme: xxx


0 commentaires