2015-03-31 93 views
1

(编辑)我想写一个sql连接。MySQL左连接别名问题

SELECT a.id, 
        a.name, 
        c.name AS 'gender', 
        a.email, 
        a.phone, 
        a.address, 
        b.name AS 'level', 
        a.level_id 
      FROM ms_user a 
      LEFT JOIN lt_user_level b 
      ON a.level_id = b.id 
      LEFT JOIN lt_user_gender c 
      ON a.gender_id = c.id 
      WHERE a.id LIKE '%".$id."%' 
      AND a.name LIKE '%".$name."%' 
      AND 'gender' LIKE '%".$gender."%' 
      AND a.email LIKE '%".$email."%'     
      AND a.phone LIKE '%".$phone."%'         
      AND a.address LIKE '%".$address."%' 
      AND 'level' LIKE '%".$level."%'             
      AND a.status <> 'D' 

现在我想按性别和级别搜索数据。但是,它不会出现

回答

0

如果要将其与列名一起使用,则需要使用反引号。你也不能使用where子句中的别名(由Barmar。正确地指出)

试试这个

SELECT a.id, 
       a.name, 
       c.name AS `gender`, 
       a.email, 
       a.phone, 
       a.address, 
       b.name AS `level`, 
       a.level_id 
     FROM ms_user a 
     LEFT JOIN lt_user_level b 
     ON a.level_id = b.id 
     LEFT JOIN lt_user_gender c 
     ON a.gender_id = c.id 
     WHERE a.id LIKE '%".$id."%' 
     AND a.name LIKE '%".$name."%' 
     AND c.name LIKE '%".$gender."%' 
     AND a.email LIKE '%".$email."%'     
     AND a.phone LIKE '%".$phone."%'         
     AND a.address LIKE '%".$address."%' 
     AND b.name LIKE '%".$level."%'             
     AND a.status <> 'D' 
+0

不能引用别名在'WHERE'条款。 – Barmar 2015-03-31 07:38:42

+0

@Barmar: - 谢谢你指出。更新了我的答案! – 2015-03-31 07:40:09

+0

感谢您的回复,谢谢 – littlecorn 2015-03-31 08:02:00

1

你在WHERE条件使用别名,你不能这样做,你必须使用完整的列名,或者如果你想使用列别名

AND 'gender' LIKE '%".$gender."%' 
使用having子句

AND c.name LIKE '%".$gender."%' 

类似地,对于

AND 'level' LIKE '%".$level."%' 

AND b.name LIKE '%".$level."%'