mysql REJOINDRE SUR SI()?
Je suis en train d'utiliser sql comme ceci:
SELECT t.*, t2.* FROM templates t
LEFT JOIN IF(t.t_type = 0,'templates_email',
IF(t.t_type = 1,'templates_sms','templates_fax')) t2
ON t.t_id = t2.t_id;
Est-il possible de faire quelque chose comme ça?
fondamentalement, je veux rejoindre sur l'un des trois tables en fonction de la valeur de la ligne.
Est-ce recommandé si c'est possible?
mise à jour
Donc,
fondamentalement la templates
table est la table qui contient toutes les informations que chaque modèle doit avoir, par exemple, le nom, id, description
ensuite, vous avez la templates_x
tableaux ces tableaux contiennent les champs qui sont propres à chaque type de modèle.
(Il y en a bien quelques-uns, et avoir une seule table avec les champs null pour ceux qui ne sont pas applicable n'est pas pratique).
Les tables sont appelés templates_x
toutefois, la bonne x est stocké dans les modèles de table comme un int flag.
La jointure entre le templates_x
tables et les templates
tableau est par le biais de la t_id
.
De sorte que proposez-vous?
Autant que je sache, même que ça ne marchera pas, comme le nom de la table pour une jointure ne peut pas être dynamique.
Double Possible de MySQL REJOINDRE SI les conditions
OriginalL'auteur Hailwood | 2010-09-27
Vous devez vous connecter pour publier un commentaire.
Est-il possible de faire quelque chose comme ça?
Non, vous ne pouvez pas utiliser attribuée dynamiquement les tables (jointure ou autre) sans l'aide de SQL dynamique de la syntaxe (Voir MySQL PreparedStatement de syntaxe).
Cette non-dynamique de ré-écriture de votre pseudo-requête suppose que les trois modèles de tableaux que vous joignez tous ont le même nombre de colonnes, et les mêmes types de données:
En supposant que rien de semblable au-delà de la
t_id
colonne, alors vous ne pouvez pas utiliser de l'UNION à tous, si vous voulez obtenir des données à partir des tables de prise en charge. Parred vers le bas pour les colonnes de laTEMPLATE
table dans la clause SELECT, vous pouvez utiliser de l'UNION...OriginalL'auteur OMG Ponies
Au lieu d'une condition de jointure, vous pouvez joindre les données puis sélectionnez le champ que vous souhaitez.
Exemple:
OriginalL'auteur Shaun Mason
J'ai peur que cela devrait être quelque chose comme ceci (si toutes les tables ont les mêmes colonnes):
Ou comme ceci:
.. et en direct avec tous vos NULL colonnes.
OriginalL'auteur Wrikken