Je suis nouveau à sql alors s'il vous plaît ours avec moi ici. J'ai deux tables, COURS et RÉPONSES qui ont un ID utilisateur de champ commun. Je suis en train de créer une vue en grille qui affiche chaque nom de cours disponible pour les utilisateurs à partir de la table COURSES et dateTaken de la table RESPONSE. Donc, j'ai simplement écrit la requête comme:Sélection de valeurs à partir de plusieurs tables
SELECT c.*, r.*
FROM COURSES c, RESPONSE r
WHERE c.userID = @userID1 and r.userID = @userID1 and r.userResponse = NULL
<SelectParameters>
<asp:Parameter Name="userID1" Type="Int32" />
</SelectParameters>
<asp:GridView
ID ="gvAvailCourses"
runat ="server"
DataSourceID ="sdsAvailCourses"
Width ="100%"
DataKeyNames ="trainingCourseID"
PageSize ="10"
AllowPaging ="true"
EnablePersistedSelection="true"
OnRowCommand ="gvAvailCourses_RowCommand"
AutoGenerateColumns ="false">
<Columns>
<asp:BoundField DataField="trainingCourseID" HeaderText="Coursen ID" />
<asp:ButtonField ButtonType="Link" DataTextField="CourseName" CommandName="CourseName" HeaderText="Course Name" />
<asp:BoundField DataField="dateEntered" HeaderText="Last Taken" />
Le tableau de réponse peut ou ne peut pas avoir un dossier d'une réponse des utilisateurs, il n'y a peut-être pas d'enregistrement pour un code d'utilisateur particulier.
Dans tous les cas, je dois afficher dans ma vue de grille, tout couseName qui se trouve dans la table COURSES quelle que soit sa valeur dans la table RESPONSE. Si la table RESPONSE n'a pas d'enregistrement pour cet utilisateur, alors la vue de la grille ne s'affichera que vide ou indiquera "Pas encore pris" pour la colonne date prise. Ma requête ci-dessus n'affiche rien du tout s'il n'y a aucun enregistrement dans la table RESPONSE. S'il vous plaît aider.
Merci!
pourquoi la clause where? –
parce qu'ils avaient cela dans leur requête d'origine? Essayer de le laisser tomber aussi simplement que possible. Sans avoir les données en face de moi et en supposant qu'il avait une valeur autre qu'un filtre pour simuler la jointure, je l'ai gardé. Si ce n'est pas nécessaire, l'OP pourrait simplement l'enlever. –
Merci pour la réponse rapide. Une autre chose que la table RESPONSE peut avoir des entrées en double. Je sais que je peux utiliser DISTINCT pour ça mais c'est pour toute la table. Comment utiliser distinct uniquement pour la table RESPONSE afin qu'un seul enregistrement soit sélectionné à partir de RESPONSE. – Ratan