Je viens de rencontrer un comportement étrange (bug ?) dans MySQL 5.7 qui n'apparaît pas dans MySQL 5.5.
Si maladroit, j'ai besoin d'un exemple pour l'expliquer .
- Créer une table en utilisant une jointure gauche sur 2 tables
- Assurez-vous que la deuxième table est vide (pas d'enregistrements) mais qu'elle est construite en ayant une valeur statique écrite dans l'un de ses champs.
La gauche se joint à aucune condition produit N lignes (comme prévu)
La gauche se joint à une condition qui ne correspond jamais ALSO produit N lignes.
### EXAMPLE ###
## CREATE TABLES
create table PCPL (K1 int); ## Table 1
create table AUX (K2 int); ## Table 2
## FILL IN TABLES
insert into PCPL values (1),(2),(3); ## fill main table with 3 values
truncate table AUX; ## No need to do this, just to make things clearer
## TEST 1 : "Dry Left join" => RESULT OK : Resulting Table has 3 rows
select PCPL.K1 as K1 , DERIVED.K2 as K2
from PCPL
LEFT JOIN (select K2, 1 as staticValue from AUX) DERIVED
ON PCPL.K1 = DERIVED.K2;
+------+------+
| K1 | K2 |
+------+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
+------+------+
3 rows in set (0,00 sec)
## TEST 2 : "Never matching condition" => STRANGE : Resulting Table NOT empty
select PCPL.K1 as K1 , DERIVED.K2 as K2
from PCPL
LEFT JOIN (select K2, 1 as staticValue from AUX) DERIVED
ON PCPL.K1 = DERIVED.K2
where staticValue=1; ##### THIS CONDITION IS NEVER MET SINCE TABLE AUX IS EMPTY
+------+------+
| K1 | K2 |
+------+------+
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
+------+------+
3 rows in set (0,00 sec)
THIS SHOULDN'T HAPPEN !
Ce comportement ne se produit pas avec MySQL 5.5.
Est-ce un bogue ou un paramètre de la version 5.5 que j'ai oublié de régler dans la version 5.7 ?
Merci pour votre temps !