J'utilise mysql 5.6.
J'ai une requête pour une table Ce que j'aimerais, c'est d'interroger pour cet état, et s'il s'agit de valeurs, d'afficher View_Listinvoices code> qui a une colonne état code> qui est un entier de 1 à 7, mais comme d'aujourd'hui est surtout null code>. p> --- code >, et s'il s'agit d'autres valeurs, de rejoindre une table de description, Descinvoicetetate Affichez la description. P> SELECT
otherColumns...,
(SELECT CASE WHEN `view_listInvoices`.`state` IS NULL OR `view_listInvoices`.`state` IN (4, 5, 6) THEN "---"
ELSE (SELECT `descinvoicestate`.`description`
FROM `view_listInvoices`
JOIN `descinvoicestate`
ON `descinvoicestate`.`idx` = `view_listInvoices`.`state`) END) as 'Prep'
FROM `view_listInvoices`
3 Réponses :
Vous devez utiliser une sélection sans nidification
SELECT
otherColumns...,
CASE WHEN `view_listInvoices`.`state` IS NULL OR `view_listInvoices`.`state` IN (4, 5, 6)
THEN "---"
ELSE `descinvoicestate`.`description`
END prep
FROM `view_listInvoices`
LEFT JOIN `descinvoicestate` ON `descinvoicestate`.`idx` = `view_listInvoices`.`stat
Vous ne pouvez pas utiliser Sélectionner code> de cette manière avec cas. quand code>. En outre, vous pouvez utiliser des sous-requêtes corrélées ici. Essayez ce qui suit à la place: SELECT
/* otherColumns..., */
CASE WHEN v.`state` IS NULL
OR v.`state` IN (4, 5, 6)
THEN '---'
ELSE ( SELECT d.description
FROM `descinvoicestate` AS d
ON d.`idx` = v.`state`
LIMIT 1 )
END as 'Prep'
FROM `view_listInvoices` AS v
Je viens de le comprendre et je suis venu avec exactement ce que vous avez. Merci.
@ BJK116. . . Ceci est plus compliqué que nécessaire, à mon avis.
Je voudrais utiliser un Il s'agit d'un type de logique assez courant à mettre en œuvre. p> p> rejoindre code> et coalesce () code>:
Malheureusement, cela ne fonctionne pas pour mon cas d'utilisation spécifique car il y a des États qui ne sont pas nuls que je veux toujours voir un "---". Cependant, il s'agit d'une bonne technique pour d'autres aspects de mon programme, donc merci.