Bonjour à tous,
Je bloque sur une requête, elle est assez lourde donc j'essaie de trouver un moyen de l'alléger, et une des solutions serait de ne récupérer qu'un élément dans une table jointe.
J'ai environ 300k entrées dans la table1 et tout autant dans la table2.
J'ai besoin de plusieurs élément dans la table1, mais seulement une ligne de la table2 par entrée de la table1.
Voici ce que j'essaie de faire mais qui ne fonctionne pas :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT t1.* FROM table1 t1 left join (select * from `table2` t2 where t2.id=t1.id limit 1 order by t2.id) ta2 on 1 WHERE t1.id=1
J'ai essayé avec une variable mais rien n'y fait... la sous requête ne prend pas en compte les données externe :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT t1.* , @num := t1.id FROM table1 t1 left join (select * from `table2` t2 where t2.id=@num limit 1 order by t2.id) ta2 on 1 WHERE t1.id=1
J'ai aussi essayé de limité avec une autre sous requête et la fonction max (mais la table est trop lourde je pense) :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT t1.* FROM table1 t1 left join table2 ta2 on ( ta2.id= t1.id and ta2.id in (select max(id) from `table2` t2 where t2.id=t1.id ) ) WHERE t1.id=1
Pourriez vous m'aider à trouver une solution s'il vous plait?
Partager