Select-Anweisung in Where-Klausel

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
dih
Mitglied
Beiträge: 1
Registriert: 04.05.2015 12:34

Select-Anweisung in Where-Klausel

Beitrag von dih »

Hallo liebes Forum,

ich habe mir eine Telefondatenbank erstellt mit den Tabellen: nutzername_tab, telefonnr_tab, funktion_tab, etc
Anhand der Spalten "telefonnr1id" und "telefonnr2id" in nutzername_tab erfolgt die Zuordnung zur Tabelle telefonnr_tab
in der alle Telefonnummer gespeichert sind. Über ein Formular kann man die ganze Datenbank durchsuchen, dies funktionierte
auch solange der Nutzer nur eine telefonnrid hatte.

Leider kann man die Alias-namen (tel1 und tel2) nicht in der Where-Klausel verwenden. Laut Doku sind Alias-Namen nicht erlaubt und man soll
die komlette Select-Anweisung noch mal in die Where-Klausel bringen. Dies habe ich getan, aber irgendwas stimmt an meinem Syntax
nicht (siehe ...SELECT `telefonnr` FROM telefonnr_tab... in der Where-Klausel). Ich habe schon alles ausprobiert, komme aber einfach nicht weiter...

Code: Alles auswählen

$select = $verbindung->prepare("SELECT t1.nutzername, t1.nachname, t1.vorname, t2.titel, t3_1.telefonnr as tel1, t3_2.telefonnr as tel2, t4.funktion, t5.bereich, t6.haus, t7.organisation, t8.standort
                                 FROM  
                                   nutzername_tab t1
                                 LEFT JOIN  
                                   titel_tab t2 ON t2.titelid = t1.titelid  
                                 LEFT JOIN 
                                   telefonnr_tab t3_1 ON t3_1.telefonnrid = t1.telefonnr1id
                                 LEFT JOIN 
                                   telefonnr_tab t3_2 ON t3_2.telefonnrid = t1.telefonnr2id
                 LEFT JOIN 
                                   funktion_tab t4 ON t4.funktionid = t1.funktionid
                                 LEFT JOIN 
                                   bereich_tab t5 ON t5.bereichid = t1.bereichid
                                 LEFT JOIN 
                                   haus_tab t6 ON t6.hausid = t1.hausid
                                 LEFT JOIN 
                                   organisation_tab t7 ON t7.organisationid = t1.organisationid
                                 LEFT JOIN 
                                   standort_tab t8 ON t8.standortid = t1.standortid
                                 
                                 WHERE (`nutzername` LIKE :suchbegriff OR
                                        `nachname` LIKE :suchbegriff OR
                                        `vorname` LIKE :suchbegriff OR
                                        `titel` LIKE :suchbegriff OR
                                     
                                       SELECT `telefonnr` FROM telefonnr_tab
                                       LEFT JOIN
                                       `telefonnr_tab` ON telefonnr_tab.telefonnrid = nutzername_tab.telefonnr1id OR
                                                                     telefonnr_tab.telefonnrid = nutzername_tab.telefonnr2id
                                         WHERE (`telefonnr` LIKE :suchbegriff) OR
                                   
                                        `funktion` LIKE :suchbegriff OR
                                        `bereich` LIKE :suchbegriff OR
                                        `haus` LIKE :suchbegriff OR
                                        `organisation` LIKE :suchbegriff OR
                                        `standort` LIKE :suchbegriff)                                         
                                         
                                 ORDER BY `vorname` DESC
                                 LIMIT 0, 25");
 
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: Select-Anweisung in Where-Klausel

Beitrag von gn#36 »

Möglicherweise irre ich mich, aber eigentlich würde ich vermuten, dass du das Ergebnis der SELECT Anweisung im WHERE Teil noch mit irgend einem Sollwert vergleichen musst. Das ist ja mehr oder weniger ein Ersatz für einen der Werte in einem einfachen Vergleich, bei dem hinterher true oder false rauskommt. Bei dir ist das aktuell aber einfach eine Liste von Werten die nicht mit irgendwas verglichen wird.

Also von der Idee her:

Code: Alles auswählen

SELECT A, B FROM Tabelle
WHERE C IN (
    SELECT A FROM Tabelle2 WHERE x = y
)
Wenn nur ein einzelner Wert beim Select herauskommt und nicht eine ganze Liste geht auch sowas:

Code: Alles auswählen

SELECT A, B FROM Tabelle
WHERE C = (
    SELECT count(*) FROM Tabelle2 WHERE x = y
)
Vom Problem her ist das ansonsten ganz ähnlich dem Fehler, der hier besprochen wird: http://dbaspot.com/sqlserver-programmin ... lause.html

Sprich:

Code: Alles auswählen

SELECT A, B FROM Tabelle
WHERE EXISTS (
    SELECT A FROM Tabelle2 WHERE x = y
)

Eventuell kannst du auch sowas verwenden: http://stackoverflow.com/questions/8590 ... ere-clause
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“