Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Spaltenalias in einer WHERE-Klausel

Ungetestet, aber dieser Hack sollte funktionieren...

SELECT * FROM (  
    SELECT profile.id AS id, given.name AS 'given_name', family.name AS 'family_name'
    FROM green_profile profile 
    LEFT JOIN green_name given ON given.profileid = profile.id AND given.name_typeid = 0 
    LEFT JOIN green_name family ON family.profileid = profile.id AND family.name_typeid = 1   
) as temptable
WHERE given_name LIKE 'levi%' 
ORDER BY given_name DESC LIMIT 0 , 25

Es funktioniert, indem Sie einfach eine temporäre Tabelle aus Ihrer ursprünglichen select-Anweisung (ohne die where-Klausel und die Reihenfolge) erstellen, die die von Ihnen angegebenen Spaltennamen enthält. Aus dieser wählen Sie dann mit den gewünschten Spaltennamen aus.

Ein besserer Ansatz könnte darin bestehen, eine Ansicht mit den gewünschten Spaltennamen zu erstellen und aus der Ansicht auszuwählen...

CREATE VIEW newtable AS
SELECT profile.id AS id, given.name AS 'given_name', family.name AS 'family_name'
FROM green_profile profile 
LEFT JOIN green_name given ON given.profileid = profile.id AND given.name_typeid = 0 
LEFT JOIN green_name family ON family.profileid = profile.id AND family.name_typeid = 1;

Und dann...

SELECT * FROM newtable
WHERE given_name LIKE 'levi%' 
ORDER BY given_name DESC LIMIT 0 , 25