2009-06-04 7 views
2

Ich möchte in einer WHERE-Klausel den Wert abrufen und verwenden, der von einer Unterauswahl in MySQL zurückgegeben wird. Ist das möglich? Es scheint unnötig zu sein, die Sub-Abfrage zweimal zu schreiben - aber wenn es nötig ist, wird MySQL clever genug sein, es nur einmal auszuführen?Mysql - Kann ich ein Subselect-Ergebnis abrufen und in einer WHERE-Klausel verwenden?

Ich habe folgendes versucht, die nicht funktioniert:

SELECT 
    (SELECT 1 FROM table WHERE somereallycomplicatedclause = 'something') 
     AS subselectresult 
FROM content WHERE subselectresult = 1 

Dies erzeugt diesen Fehler:

#1054 - Unknown column 'subselectresult' in 'where clause' 

Dank

Antwort

0

Ihre Anfrage, wie Sie angezeigt ist seltsam. Sie können das gleiche Ergebnis auf diese Weise (Kreuzprodukt) erreichen:

SELECT S.One 
FROM contacts, 
(SELECT DISTINCT 1 as One FROM table WHERE somereallycomplicatedclause = 'something') S 

Ich denke, Sie sollten mehr darüber sagen, was Sie versuchen, Sie zu lösen (zum Beispiel, was die Verbindung zwischen der Unterabfrage ist und die Kontakte Tabelle)?

+0

Sorry, ich habe vereinfacht und auch den falschen Tabellennamen verwendet. Es ist ein Inhaltsverzeichnis, der Subselect gibt zurück, ob der aktuelle Kontakt Zugriff auf Teile jeder Zeile hat. Daher verwendet der Subselect ContentId, das der Primärschlüssel der Haupttabelle ist, die ich abfrage. Es gibt wahrscheinlich einen saubereren Weg, dies zu tun, aber ich bin in ein bestehendes Schema eingebunden und die Abfrage wird viel komplizierter. Der gesamte Subselect SQL wird durch ein anderes Bit Code generiert, sonst hätte ich wahrscheinlich einen Join benutzt. –

+0

Was meinen Sie damit, dass die Unterabfrage von einem anderen Code erzeugt wird? Meine anfängliche Idee ist es zu versuchen, es irgendwie in einen Join zu verwandeln (das ist der Grund für mehr Details). –

+0

Ich bin nicht gut in MySQL, aber ist es möglich, eine Funktion in MySQL zu definieren, die die innere Auswahl durchführt und das Ergebnis zurückgibt? Sie können der Funktion die Parameter aus der aktuellen Zeile zur Verfügung stellen und die Auswahl vornehmen. Die Leistung wird sich jedoch wahrscheinlich nicht zu sehr ändern, da Sie im Prinzip die innere Auswahl für jede Zeile aus der äußeren Auswahl ausführen lassen müssen. –

Verwandte Themen