2016-03-19 10 views
0

Das Problem arbeitet:verwenden oder in einer SQL-Anweisung, die in mehreren Tabellen

Ich habe 2 Tabellen i Daten von einem bin Auswahl Table_Booked genannt, die für jedes Mal einen Datensatz mit einem Benutzernamen und SessionID enthält ein Benutzer Bücher, eine andere Tabelle namens Table_Sessions, die die Sitzungsdetails wie SessionId, Subject, TeacherID, Day, Am_Pm und WhatYear enthält.

Ich versuche, alle Datensätze aus Table_Booked auszuwählen, wo der Benutzername den aktuellen Benutzern entspricht, und ich möchte auch die Tag & Am_Pm-Daten für jede der vom Benutzer gebuchten Sitzungen oder die Datensätze für die Sitzung abrufen Er versucht zu buchen. Das Ziel besteht darin, die Datensätze zu vergleichen, und wenn sie in demselben Zeitfenster auftreten, kann der Benutzer die Sitzung nicht buchen.

Der Code:

Select Table_Session.Day,Table_Session.Am_Pm,Table_Session.SessionId 
From Table_Session,Table_Booked 
Where Table_Booked.Username = 'G9rpenman' and 
((Table_Booked.SessionID = Table_Session.SessionId) Or (Table_Session.SessionId = 9)) 

Wenn ich diesen Code ausführen es holt die Informationen aus Table_Session.SessionId = 9 zweimal und anderen Optimierungen haben in ähnlicher Weise zufällige Datenselektion verursacht. Ich kann nichts darüber finden. Danke für Ihre Hilfe. Wenn Sie das Gefühl haben, dass ich irgendwelche wichtigen Informationen verpasst habe, lassen Sie es mich wissen und bearbeiten Sie dies.

Heres einige Screenshots meiner Tabellen mit den Daten im mit http://imgur.com/a/9fZtW

+0

Beispieldaten und die gewünschten Ergebnisse helfen würde, vermitteln, was Sie tun wollen. –

+0

Was ist das Problem? Die Wiederholungssätze bedeuten, dass zwei Sitzungen dem gebuchten Tabellendatensatz entsprechen. Fügen Sie AM/PM-Felder hinzu, um zu sehen. Wie Sie bereits erwähnt haben, möchten Sie ** alle ** gebuchten und verwandten Sitzungen abrufen. – Parfait

+0

In den Aufzeichnungen gibt es keine Wiederholung. Jeder SessionID ist ein AUTONUM so einzigartig ist, und es gibt keine sessionid 9 in der Buchungstabelle so dass der einzige Ort, um es aus gekommen wäre Table_Session, wo es nur einmal Instanz davon mache ich aus irgendeinem Grunde zu denken, die Daten selbst zu wiederholen. –

Antwort

0

Warum nicht eine Erklärung versuchen JOIN im Gegensatz aus beiden Tabellen die Art und Weise der Auswahl sind Sie?

Was ist die Ausgabe der folgenden Abfrage:

SELECT 
    TS.Day 
    ,TS.Am_Pm 
    ,TS.SessionId 
FROM Table_Session TS 
INNER JOIN Table_Booked TB ON TS.SessionId = TB.SessionID 
    OR TS.SessionId = 9 
WHERE TB.Username = 'G9rpenman' 

Könnten Sie einige Beispieldaten aus beiden Tabellen veröffentlichen, so können wir sehen, was Sie mehr zu bieten Hilfe zu vergleichen sind versuchen?

+0

Ich habe einige Screenshots der Tabellen hinzugefügt, wenn das helfen würde, ich wüsste nicht, in welchem ​​Format Sie die Beispieldaten haben wollten. Vielen Dank für die Hilfe. –

0

Einfache Regel: Nie Verwenden Sie Kommas in der FROM Klausel. Immer verwenden explizite JOIN Syntax.

Der Grund für die Vervielfältigung ist der OR. Ich denke, das tun, was Sie wollen:

Select s.Day, s.Am_Pm, s.SessionId 
From Table_Booked b join 
    Table_Session s 
    on s.SessionID = b.SessionId or s.SessionId = 9 
Where b.Username = 'G9rpenman' ; 

Wenn nicht, Sie union benötigen:

Select s.Day, s.Am_Pm, s.SessionId 
From Table_Booked b join 
    Table_Session s 
    on s.SessionID = b.SessionId 
Where b.Username = 'G9rpenman' 
union 
Select s.Day, s.Am_Pm, s.SessionId 
from Table_Session s 
where s.SessionId = 9; 
+0

Beides bringt einen Fehler in der from-Klausel und hebt die Joinsyntax hervor? –

+0

Es ist nicht offensichtlich, dass die FROM-Klausel falsch ist. Es sieht für mich wie Standard SQL aus. –

Verwandte Themen