1

我的两个表无法加入。跑步

EXPLAIN SELECT  `A`.`id` 
FROM  `demo`.`A` AS  `A` 
INNER JOIN  `demo`.`B` AS  `B` 
ON (  `A`.`id` = 'B.A_id' )

产量

extra="Impossible WHERE noticed after reading const tables"

结果。我所有的研究表明,这条消息应该意味着其中一个表是空的,或者 where 条件包含一些永远无法满足的条件,例如“where 1=0”。

为了隔离问题,我创建了数据库的副本并删除了除复制问题所需的表和行之外的所有内容。为了消除可能的问题,我删除了其中一张表上的所有索引。

我什至尝试过:

mysql> select * from A where id=23;
+----+
| id |
+----+
| 23 |
+----+
1 row in set (0.00 sec)

mysql> select * from B where A_id=23;
+------+------+
| A_id | B_id |
+------+------+
|   23 |   10 |
|   23 |   13 |
+------+------+
2 rows in set (0.00 sec)

所以这个连接应该至少产生一行。有些东西必须被打破,但我不知道是什么。

https://gist.github.com/3150634

4

4 回答 4

2

您在 where 条件中使用了错误的字符。用`替换':

SELECT  `A`.`id` 
FROM  `demo`.`A` AS  `A` 
INNER JOIN  `demo`.`B` AS  `B` 
ON (  `A`.`id` = `B`.`A_id` )
于 2012-07-20T13:49:03.107 回答
1

将“B.A_id”更改为

EXPLAIN SELECT  `A`.`id`  
FROM  `demo`.`A` AS  `A`  
INNER JOIN  `demo`.`B` AS  `B`  
ON (  `A`.`id` = `B`.`A_id' ) 
于 2012-07-20T13:50:55.317 回答
1

这不应该是

ON (  `A`.`id` = `B`.`A_id` )

?

于 2012-07-20T13:49:34.027 回答
0

我终于弄清楚发生了什么。在原始查询中,CakePHP 生成

... ON (  `Equipment`.`id` = 'ql.equipment_id' AND ...

所以 ql.equipment_id 作为一个常量字符串给出。难怪 MySQL 将条件标记为“不可能”!

当我看那些的时候,我需要更用力地眯着眼睛!

感谢大家的快速回复。

于 2012-07-20T14:10:29.930 回答