Verwendung einer temporären Spalte in der where-Klausel

8

Warum kann ich keine temporäre Spalte in der where-Klausel verwenden?

Zum Beispiel diese Abfrage:

%Vor%

Dies ruft zwei Spalten auf, eine mit dem Namen product_brand und eine mit dem Namen brand_count . brand_count wird im laufenden Betrieb erstellt und ist immer 1 oder 0, je nachdem, ob es 50 oder Produkte mit dieser Marke gibt oder nicht.

All dies macht für mich Sinn, außer dass ich nicht nur wählen kann, wenn brand_count = 1 wie in dieser Abfrage unten steht:

%Vor%

Das gibt mir diesen Fehler:

%Vor%     
JD Isaacks 10.03.2009, 15:37
quelle

5 Antworten

13

Verwenden Sie stattdessen HAVING :

%Vor%

WHERE wird vor GROUP BY ausgewertet. HAVING wird nach ausgewertet.

    
derobert 10.03.2009, 15:40
quelle
2

Weil in SQL die Spalten zuerst "ausgewählt" und dann "projiziert" werden.

    
Hawk Kroeger 10.03.2009 15:40
quelle
2

Sie müssen die vollständige Klausel verwenden, also benötigen Sie:

%Vor%

Dies ist für jedes berechnete Feld in jeder SQL-Anweisung gleich.

Um zu vereinfachen:

%Vor%

funktioniert nicht, aber:

%Vor%

wird. In deinem Fall ist es dasselbe.

    
Toby Allen 10.03.2009 15:41
quelle
0

Weil es keine Ahnung hat, was diese Spalte ist, bis nach der Verarbeitung.

Wenn Sie auf die Spalte mit diesem Namen zugreifen möchten, müssten Sie eine Unterabfrage verwenden, andernfalls müssen Sie die Spalte ohne den Namen, den Sie angegeben haben, qualifizieren, indem Sie Ihre Fallanweisung wiederholen.

    
TheTXI 10.03.2009 15:40
quelle
0

Wenn ich Ihre Absicht richtig gelesen habe, können Sie diese Abfrage so umschreiben, dass sie lautet:

%Vor%

Dies wird Ihnen alle product_brands geben, die eine count > 50 haben und Ihnen auch zeigen die Zählung für jeden.

    
tlatourelle 10.03.2009 15:48
quelle

Tags und Links