Ein paar erkennt Optionen.
Fügen Sie jedem SELECT eine WHERE-Klausel hinzu. Es ist nicht möglich, das Ergebnis des Ausdrucks in der SELECT-Liste durch den zugewiesenen Alias in der WHERE-Klausel derselben Abfrage zu referenzieren. Um das Prädikat in einer WHERE-Klausel angeben, müßten Sie den Ausdruck wiederholen:
SELECT CONCAT(p.surname,' ',p.firstname) AS NAME
FROM Prospects p
WHERE CONCAT(p.surname,' ',p.firstname) = ?
UNION
SELECT CONCAT(c.last_name,' ',c.first_name)
FROM customer c
WHERE CONCAT(c.last_name,' ',c.first_name) = ?
ORDER BY 1
MySQL erweitert den SQL-Standard und ermöglichen eine HAVING-Klausel nicht-Aggregat Ausdrücke verweisen, die nicht in einer Gruppe durch
Um den Alias nach Namen in einer WHERE-Klausel zu referenzieren, können Sie eine Inline-Ansicht verwenden. Beachten Sie jedoch, dass es zu einer erheblichen Leistungseinbuße kommen kann, da das Prädikat nicht in die Inline-Ansicht verschoben wird. Das bedeutet, dass MySQL alle Zeilen aus der Sichtabfrage als abgeleitete Tabelle materialisiert und dann die äußere Abfrage gegen die abgeleitete Tabelle ausgeführt wird. Tun Sie dies nicht, besonders bei großen Tischen:
SELECT v.name
FROM (SELECT CONCAT(p.Surname,' ',p.firstname) AS NAME
FROM Prospects p
UNION
SELECT CONCAT(c.last_name,' ',c.first_name)
FROM customer c
) v
WHERE v.name = ?
ORDER BY 1