0
votes

Comment faites-vous une sélection imbriquée avec une restriction (où)

J'ai une base de données pour une petite application de calendrier dans laquelle les personnes sont stockées dans la table des clients, les dates sont stockées dans la table calendrate et, étant donné que les relations sont nombreuses à beaucoup, il existe une table de liaison appelée client_date qui contient ses deux identifiants. .

Je veux faire une sélection imbriquée pour que toutes les dates d'une personne particulière permettent de dire avec ID = 2. Je suis venu avec ça, mais elle imprime toutes les dates et les affiche à la personne avec cet identifiant, au lieu d'imprimer simplement les seuls qu'il est asigné à: xxx

Y a-t-il quelque chose que je fais mal ou existe-t-il une autre façon de faire une déclaration de sélection imbriquée?

Ma base de données et mes données: xxx

la sortie que je reçois Pour le client particulier: xxx


4 commentaires

Je ne vois aucun besoin de déclarations imbriquées ici. Les jointures feront le travail parfaitement bien. Notez qu'un résultat souhaité est toujours utile.


Oui, je sais que je l'ai déjà fait avec une double jointure, mais on m'a dit que c'était mieux et plus rapide d'utiliser des déclarations de sélection imbriquées. De plus, je veux comprendre comment ils fonctionnent mieux.


Vous avez été mal informé.


Et si au lieu d'utiliser ce où clientId dans (Sélectionnez ID de clients) ESSAYEZ CE Où ClientID = C.ID . Faites-moi savoir si cela aide.


3 Réponses :


1
votes

Pourquoi pas simplement utiliser rejoindre S? XXX


2 commentaires

Oui, cela fonctionne effectivement et je l'ai déjà fait en utilisant deux jointures, mais je voulais le faire avec une seule et nichée choisit parce que mon professeur m'a dit qu'ils seraient plus rapides et les connaissant serait bénéfique.


@Malazzar. . . Le savoir n'est pas bénéfique. Cependant, il est douteux que les sous-coutumes soient plus rapides.



1
votes

Votre erreur est ici: xxx pré>

chaque identifiant client em> existe dans la table des clients. Vous le souhaitez à la place: P>

on (c.id, d.id) in (select clientid, dateid from client_date)


0 commentaires

1
votes

Je veux faire une sélection imbriquée pour obtenir toutes les dates d'un particulier Personne laisse dire avec id = 2

Ceci peut être fait avec: xxx

une requête de jointure équivalente serait: xxx

Vue sur DB Fiddle

Remarque: les deux requêtes ne sont que équivalentes, S'il n'y a pas de duplicates dans la table client_date .

Si vous souhaitez sélectionner des données à partir de plusieurs table, vous avez actuellement besoin à utiliser un REJOINDRE. Dans ce cas, demandant comment le faire sans jointures, ne serait pas de sens.


0 commentaires