0
votes

Obtenir une déclaration de cas pour travailler avec sous-requête / rejoindre

J'utilise mysql 5.6.

J'ai une requête pour une table 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>

Ce que j'aimerais, c'est d'interroger pour cet état, et s'il s'agit de valeurs, d'afficher --- 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`


0 commentaires

3 Réponses :


1
votes

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


0 commentaires

1
votes

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


2 commentaires

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.



1
votes

Je voudrais utiliser un rejoindre et coalesce () : xxx

Il s'agit d'un type de logique assez courant à mettre en œuvre.


1 commentaires

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.