使用INNER JOIN的MySQL错误#1142

时间:2013-05-02 18:28:24

标签: mysql sql

SELECT * FROM `PP`
INNER JOIN `CM_MASTER`.`LOCATIONGUID` 
ON `PP`.`ADDR` = `CM_MASTER`.`ADDRESS1` 
AND `PP`.`ZIP` = LEFT(`CM_MASTER`.`POSTALCODE`,5);

当我尝试使用来自CM_MASTER表的匹配的LOCATIONGUID记录返回PP表中的所有列时,两个表之间的街道地址和邮政编码匹配。上面的代码返回错误:

 #1142 - SELECT command denied to user 'ameridw5'@'localhost' for table 'LOCATIONGUID' 

我在phpMyAdmin中运行此查询。 有人能指出我的方向吗?

修改 cm_master表包含address1,zip和LOCATIONGUID列。 pp表有addr和zip列。 如果pp.addr = cm_master.address1和pp.zp = cm_master.zip那么 返回查询中的记录,并加入cm_master.LOCATIONGUID。 这有可能吗?

2 个答案:

答案 0 :(得分:6)

你的语法错了。您需要将LEFT放在table_name.column_name周围,而不是拆分table_name和column_name。

所以改变

CM_MASTER.LEFT(POSTALCODE,5) 

到这个

LEFT(CM_MASTER.POSTALCODE,5) 

完整查询将是:

SELECT * 
FROM `PP`
INNER JOIN `CM_MASTER`
  ON `PP`.`ADDR` = `CM_MASTER`.`ADDRESS1` 
  AND `PP`.`ZIP` = LEFT(`CM_MASTER`.`POSTALCODE`,5) ;

编辑,目前尚不清楚你的表结构是什么,但是你需要LocationGUID,那么你可能还需要添加该列:

SELECT * 
FROM `PP`
INNER JOIN `CM_MASTER`
  ON `PP`.`LOCATIONGUID` = `CM_MASTER`.`LOCATIONGUID` 
  AND `PP`.`ADDR` = `CM_MASTER`.`ADDRESS1` 
  AND `PP`.`ZIP` = LEFT(`CM_MASTER`.`POSTALCODE`,5) ;

<击>

答案 1 :(得分:1)

似乎此用户ameridw5未拥有表LOCATIONGUID

的权限

只需为此用户设置权限所有权限

    GRANT ALL PRIVILEGES on mydb.* to 'ameridw5'@'localhost' identified by 'you';

文档:http://dev.mysql.com/doc/refman/5.1/en/adding-users.html