J'essaie de réaliser ce qui suit ici.Sous-requête conditionnelle dans l'instruction SELECT
J'ai 3 tables:
- blocs
- articles
- ingrédients
ingrédients et je fais une recherche en fonction du résultat, je veux rejoindre ou sous-requête des colonnes de des blocs ou des objets.
J'ai réussi à la colonne du sous-menu 1 conditionnel (name
) dans mon instruction select, mais si je veux sélectionner plus d'une colonne, par ex. SELECT name, material_id
, je reçois l'erreur suivante:
Only a single result allowed for a SELECT that is part of an expression
Je l'ai vu de nombreux cas similaires ici sur le SO mais ne peut pas réussir à obtenir ce droit.
SELECT
`crafting_recipes`.`ingredient_id`, `crafting_recipes`.`ingredient_table`,
CASE
WHEN
`crafting_recipes`.`ingredient_table` = 'blocks' THEN
(SELECT `name` FROM `blocks` WHERE `id` = `crafting_recipes`.`ingredient_id`)
ELSE
(SELECT `name` FROM `items` WHERE `id` = `crafting_recipes`.`ingredient_id`)
END
FROM
`crafting_recipes`
WHERE
`crafting_recipes`.`result_id` = 15 AND
`crafting_recipes`.`result_table` = "blocks"
Puisque la sélection de plusieurs colonnes dans une sous-sélection n'est pas supportée, quelle serait la bonne façon d'y parvenir?
Vous avez probablement REJOINT ici OUTER. –
Votre méthode fonctionne et est plus propre mais elle ne permet pas de résultats multiples. Avez-vous une solution pour cela? Merci – richard
Que voulez-vous dire "résultats multiples"? Les sous-sélections de la clause select sont uniquement autorisées à renvoyer exactement une valeur. Cette méthode fonctionne correctement dans le cas où plus d'une ligne correspond à la jointure externe, vous obtenez plus de une ligne en conséquence. – Donnie