2012-02-28 97 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