Vous pouvez left outer join les deux tables, puis utilisez la fonction IF()
dans la clause SELECT
:
SELECT a.*,
IF(a.find = 1, b1.value, b2.value) b_value
FROM tableA a
LEFT JOIN tableBA b1 ON (b1.aid = a.id)
LEFT JOIN tableBB b2 ON (b2.aid = a.id);
Cas de test:
CREATE TABLE tableA (id int, find int, value int);
CREATE TABLE tableBA (id int, aid int, value int);
CREATE TABLE tableBB (id int, aid int, value int);
INSERT INTO tableA VALUES (1, 1, 100);
INSERT INTO tableA VALUES (2, 0, 200);
INSERT INTO tableA VALUES (3, 1, 300);
INSERT INTO tableA VALUES (4, 0, 400);
INSERT INTO tableBA VALUES (1, 1, 10);
INSERT INTO tableBA VALUES (2, 3, 20);
INSERT INTO tableBB VALUES (1, 2, 30);
INSERT INTO tableBB VALUES (2, 4, 40);
Résultat:
+------+------+-------+---------+
| id | find | value | b_value |
+------+------+-------+---------+
| 1 | 0 | 100 | 10 |
| 2 | 1 | 200 | 30 |
| 3 | 0 | 300 | 20 |
| 4 | 1 | 400 | 40 |
+------+------+-------+---------+
4 rows in set (0.00 sec)
Cela ressemble à de sérieux problèmes de normalisation si votre clé étrangère est liée à plusieurs tables en fonction d'une valeur de tableA. – JohnFx
Le problème est que j'ai une table qui définit un ordre et deux tables différentes pour les calculs. En fonction d'un champ dans l'ordre est la table et l'ensemble de code que j'utilise, mais je dois être en mesure d'exécuter un résumé des deux en même temps. Une autre question avec la même question de base; juste oublié jusqu'à ce que j'ai posté. http://stackoverflow.com/questions/3924632/mysql-select-from-different-table-depending-on-master-table – David
Pourriez-vous montrer des noms de tables réalistes dans votre exemple? Le commentaire est un peu difficile à suivre. – JohnFx