2016-04-22 64 views
0

我已經寫了下面的SQL語句,並得到結果,當我加入其中name =聲明不承認「名稱」凡從CONCAT /工會的腳本語句

SELECT CONCAT(`Surname` , ' ', `firstname`) AS NAME 
FROM Prospects 
UNION 
SELECT CONCAT(`last_name` , ' ', `first_name`) AS NAME 
FROM customer 
ORDER BY name; 

回答

0
SELECT 
    CONCAT(Surname , ' ', firstname) AS NAME FROM Prospects 
UNION 
SELECT 
    CONCAT(last_name , ' ', first_name) AS NAME FROM customer 
WHERE 
    CONCAT(Surname , ' ', firstname) = <statement> or 
    CONCAT(last_name, ' ', firstname) = <statement> 
ORDER BY name; 
1

一對夫婦的選項。

爲每個SELECT添加WHERE子句。在同一查詢的WHERE子句中,不可能通過分配的別名在SELECT列表中引用表達式的結果。要指定在WHERE子句中的謂語,你需要重複表達:

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擴展了SQL標準,並允許HAVING子句引用不是在GROUP BY

非集合表達式
SELECT CONCAT(p.Surname,' ',p.firstname) AS NAME 
    FROM Prospects p 
HAVING NAME = ? 
    UNION 
SELECT CONCAT(c.last_name,' ',c.first_name) AS NAME 
    FROM customer c 
HAVING NAME = ? 
    ORDER BY 1 

要在WHERE子句中按名稱引用別名,可以使用內聯視圖。但請注意,可能會有顯着的性能損失,因爲謂詞是而不是被推入內聯視圖。這意味着MySQL會將視圖查詢中的所有行實現爲派生表,然後外部查詢將對派生表運行。不要這樣做,特別是對於大表格:

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