1

2 つのテーブルが結合できません。ランニング

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"

結果で。私の調査によると、このメッセージは、テーブルの 1 つが空であるか、「where 1=0」など、満たされない条件が where 条件に含まれていることを意味するはずです。

問題を切り分けるために、データベースのコピーを作成し、問題の再現に必要なテーブルと行以外はすべて削除しました。考えられる問題を排除するために、テーブルの 1 つですべてのインデックスを削除しました。

私も試しました:

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)

したがって、この結合は少なくとも 1 つの行を生成する必要があります。何かが壊れている必要がありますが、何が原因かわかりません。

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

これはすべきではありません

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

于 2012-07-20T13:49:34.027 に答える
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 に答える
0

私はついに何が起こっているのかを理解しました。元のクエリでは、CakePHP が生成した

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

したがって、ql.equipment_id は定数文字列として指定されます。MySQL がこの状態を「不可能」とタグ付けしたのも不思議ではありません!

それらを見るとき、私はもっと目を細める必要があります!

迅速な対応をありがとうございました。

于 2012-07-20T14:10:29.930 に答える