(sur le baratin SQL)
J’ai pas tout suivi, mais oui tu peux concaténer tes tables. Et oui tu le fais mal.
SQL
[color=blue;font-weight:bold]SELECT[/color] *
FROM A, B
[…]
Cela s’appelle un produit cartésien, ou CROSS JOIN. C’est une jointure entre deux tables (les jointures sont toujours des produits cartésiens) sans conditions.
Si tu as ces deux tables
A B
1 4
2 5
3 6
Le produit cartésien n’est rien de plus que :
1 4
1 5
1 6
2 4
2 5
2 6
3 4
3 5
3 6
Si tu fais un LEFT JOIN, tu auras l’ensemble des couples de la forme (a in A \ (a, NULL)), etc.
C’est pour cela que la jointure est coûteuse : si tu as N tuples dans A, M dans B, ça te fait N*M tuples au final. Et en terme de coût temps de processus, c’est dans le même ordre d’idées.
Maintenant, ce que tu cherches à faire c’est concaténer, pas faire un produit cartésien. C’est à dire que tu veux l’union de deux tables pour ne pas te faire chier.
Cela se fait heureusement très bien : avec UNION.
Par contre, l’union de deux ensembles, c’est prendre tous les éléments de manière distincte (par défaut, je crois que ça peut se changer dans certains SGBD).
http://dev.mysql.com/doc/refman/5.0/en/union.html
Dans le meilleure des cas :
(SELECT * FROM a) UNION ALL (SELECT * FROM b)
Il s’agit de l’union telle que pas définie dans les opérateurs ensemblistes. ie: l’union avec les doublons.
Ici, a et b doivent être des tables compatibles. N’espère même pas faire l’union d’une table à trois champs (int, int, varchar(45)) avec une table à trois champs (float, datetime, text) ou dont il n’y a pas le même nombre de champs.
Voilà.
Tu verras, quand tu te feras exploser la gueule. D’autant que Jack Carver il a du mal à s’en servir (il bouge comme il est pas permis, mais couché).