2010-01-13 5 views
7

Ich habe Zweifel und Fragen bezüglich Alias ​​in SQL. Wenn ich den Alias ​​in derselben Abfrage verwenden möchte, kann ich ihn verwenden. Für zB: Tabellenname xyz mit Spalte ein Betrachten und bVerwenden von Alias ​​in Abfrage und Verwendung

select (a/b) as temp , temp/5 from xyz 

Ist dies möglich, in irgendeiner Weise?

Antwort

8

Sie sprechen davon, einem Ausdruck in einer Abfrage einen Bezeichner zu geben und diesen Bezeichner dann in anderen Teilen der Abfrage wiederzuverwenden?

Das ist nicht in Microsoft SQL Server möglich, auf die fast alle meine SQL-Erfahrung beschränkt ist. Aber Sie können Folgendes tun.

SELECT temp, temp/5 
FROM (
    SELECT (a/b) AS temp 
    FROM xyz 
) AS T1 

Offensichtlich ist dieses Beispiel nicht besonders nützlich, aber wenn Sie den Ausdruck an mehreren Stellen verwendeten, könnte es nützlicher sein. Es kann sich als nützlich erweisen, wenn die Ausdrücke lang sind und Sie sie auch gruppieren möchten, da die GROUP BY-Klausel erfordert, dass Sie den Ausdruck erneut angeben.

In MSSQL haben Sie auch die Möglichkeit, berechnete Spalten zu erstellen, die im Tabellenschema und nicht in der Abfrage angegeben sind.

+0

+1. Guter Punkt. – Guru

-1

Sie könnten W3Schools "SQL Alias" als eine gute Hilfe finden. Hier

ist ein Beispiel aus dem Tutorial:

SELECT po.OrderID, p.LastName, p.FirstName 
FROM Persons AS p, 
Product_Orders AS po 
WHERE p.LastName='Hansen' AND p.FirstName='Ola' 

In Bezug auf den Alias ​​weiter in der Abfrage verwenden, abhängig von der Datenbank, die Sie verwenden es möglich sein könnte.

2

Nicht möglich in derselben SELECT-Klausel, vorausgesetzt, Ihr SQL-Produkt entspricht dem Standard SQL-92 der Einstiegsebene.

Ausdrücke (und ihre Korrelationsnamen) in der SELECT Klausel entstehen "auf einmal"; Es gibt keine Bewertung von links nach rechts, auf die Sie zu hoffen scheinen.

Nach @Josh Einstein Antwort hier, können Sie eine abgeleitete Tabelle als Workaround verwenden (hoffentlich mit einem sinnvollen Namen als 'temp' und Bereitstellung eines für die temp/5 Ausdruck - denken Sie daran, die Person, die erben wird Code).

Beachten Sie, dass der von Ihnen gepostete Code auf der MS Access-Datenbank-Engine funktioniert (und Ihrem zweiten Ausdruck einen sinnlosen Korrelationsnamen wie Expr1 zuweisen würde), aber wiederum kein echtes SQL-Produkt.

5

Sie können auch Oracle with Anweisung verwenden. Ähnliche Aussagen gibt es auch in anderen DBs. Hier ist der, den wir für Oracle verwenden.

with t 
as (select a/b as temp 
from xyz) 
select temp, temp/5 
from t 
/

Dies hat einen Leistungsvorteil, vor allem, wenn Sie eine komplexe Abfragen haben mehrere verschachtelte Abfragen mit, weil the WITH statement nur einmal und in den folgenden Anweisungen verwendet wird ausgewertet.

1

Es ist möglich, ich denke:

SELECT (A/B) as temp, (temp/5) 
FROM xyz, 
(SELECT numerator_field as A, Denominator_field as B FROM xyz), 
(SELECT (numerator_field/denominator_field) as temp FROM xyz); 
Verwandte Themen