2012-02-28 134 views
1

我有這個SQL查詢(下),它的工程很好,但我需要修改它只選擇記錄與$第一個字符。我嘗試了一些LIKE A%的變體,但沒有運氣。我的情況的癥結似乎是名稱別名。如果我在ORDER之前使用WHERE名稱LIKE'A%',我收到錯誤。這似乎是一個合乎邏輯的地方。有什麼建議麼?MYSQL - 按首字母排序

SELECT 
    IF(company_name <> '', company_name, PC_last_name) AS name, 
    customer_id AS id, 
    company_name AS cn, 
    PC_first_name AS pcf, 
    PC_last_name AS pcl, 
    primary_phone 
FROM sales_customer 
ORDER BY name 

回答

2

我認爲你不能使用別名上WHERE這種比較。試試這個:

SELECT 
    IF(company_name <> '', company_name, PC_last_name) AS name, 
    customer_id AS id, 
    company_name AS cn, 
    PC_first_name AS pcf, 
    PC_last_name AS pcl, 
    primary_phone 
FROM sales_customer 
WHERE IF(company_name <> '', company_name, PC_last_name) LIKE 'A%' 
ORDER BY name 
+0

賓果!工作完美。我知道這與別名有什麼關係,爲什麼它不能正確使用別名? – 2012-02-28 16:06:59

+0

從MySQL手冊* apud * [這個答案](http://stackoverflow.com/a/200203/825789):不允許在WHERE子句中引用列別名,因爲列值可能不是但在執行WHERE子句時會被確定。請參見[請參見第B.1.5.4節「列別名問題」](http://dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html)。 – bfavaretto 2012-02-28 16:14:37

+0

感謝您的信息!現在我明白了。 – 2012-02-28 18:23:21

6

試試這個,它得到了name的第一個字母。

SELECT IF(company_name <> '', company_name, PC_last_name) AS name, customer_id AS id, company_name AS cn, PC_first_name AS pcf, PC_last_name AS pcl, primary_phone 
FROM sales_customer 
ORDER BY SUBSTRING(name, 1, 1) ASC 
+0

這返回了整個表的某種隨機排序。我再次認爲別名是問題。 – 2012-02-28 16:07:12