Mes tableaux sont les suivants:MYSQL Max (colonne) où 2 tables ont la même colonne
books:
id | abbr | volume | name |
1 | GZ | SLZT | Gazo |
...
vol1:
id | book | chapter | line
1 | GZ | 1 | "text..."
...
vol2:
id | book | chapter | line
1 | SD | 1 | "more..."
...
(les tables alignées à vol1.book = books.abbr, dans cet exemple, je montre que correspondant Vol1.) Donc, pour trouver le dernier chapitre d'un livre pour le volume 1, il est simple de trouver le dernier chapitre d'un livre pour le volume 1. Je fais ceci:
SELECT MAX(chapter) FROM vol1, books WHERE vol1.book=books.abbr
AND books.volume='SLZT' AND books.name ='Gazo';
qui fonctionne bien. MAIS, et si je voulais inclure tout dans vol2 dans la même requête?
J'ai essayé:
Select Max(chapter) FROM vol1,vol2,books
WHERE (vol1.book=books.abbr OR vl2.book=books.abbr)
AND books.volume='SLZT' AND books.name = 'Gazo';
qui bien sûr me donne une erreur qui dit chapitre est ambigu car il est utilisé deux fois.
En outre, je vais faire les valeurs 'SLZT' et 'Gazo' dans les variables d'exemple dans le code réel. Donc, essentiellement, j'aimerais pouvoir entrer n'importe quel livre/volume et trouver la valeur du chapitre le plus élevé, qu'il soit en vol1 ou en vol2.
J'espère avoir conçu la question assez bien pour fournir toutes les informations nécessaires. Et merci!
:: Modifier
Quelqu'un a posté la solution suivante et il est proche - la chose étrange est qu'il a disparu des réponses! Ils ont suggéré d'utiliser UNION:
SELECT MAX(chapter) FROM vol1
JOIN books ON vol1.book = books.abbr
WHERE books.volume = 'SLZT' AND books.name = 'Gazo'
UNION
SELECT MAX(chapter) FROM vol2
JOIN books ON vol2.book = books.abbr
WHERE books.volume = 'SLZT' AND books.name = 'Gazo'
Cela me donne (par exemple):
MAX(chapter)
50
NULL
Mais comment puis-je obtenir pour revenir seulement la valeur 50 (la valeur non nulle) de la table?
Une raison pour laquelle vous ne mettez pas simplement les deux dans une table et avez une colonne de volume? –