J'ai ces cinq tables J'ai besoin de rejoindre la table des commandes de manière dynamique avec ces conditions p> J'ai essayé que p> mais cela me donne une syntaxe incorrecte près de "cas"
J'ai fait des recherches sur les déclarations de cas et si des déclarations en SQL mais aucun espoir. toute aide appréciée p> p>
3 Réponses :
Vous devez utiliser la jointure gauche et gérer avec la clause de Coalece pour gérer les valeurs null provenant des tables. E.g, si Order_Install, commander_remove peut avoir commandeDetailName et l'un d'entre eux donnera des valeurs basées sur le type typeid.
Vous devez avoir coalesce (order_install.orderdetailname, ordre_remove.orderdetailname) en tant que commande datailname code> p>
Je sais que l'on ne devrait répondre que de répondre à une question. Mais dans ce cas, il semble mieux d'optimiser la structure de données d'abord pour éviter les jointures du tout. P>
La structure de données ne semble pas être optimale, de le dire doucement. Cela résulte ensuite dans des stratégies de jointure complexes et de nombreux autres problèmes. P>
Veuillez expliquer ce que les trois ordres_stage_ * - les tables contiennent et doivent faire pour vous. P>
Je suppose que vous voulez stocker ces commandes dans ces trois tables qui ont une étape spécifique. Mais cela doit être fait avec un seul attribut supplémentaire sur les commandes de la table, au cas où ces étapes sont disjonctionnées (= toujours différente, impossible qu'un ordre a plusieurs étapes). P>
@Venkataraman_R mentionné, sa solution a résolu le problème Voici la déclaration complète SQL
SELECT COALESCE(osn.enum,osr.enum,osre.enum) as 'Current Stage', COALESCE(oen.enum,oer.enum,oere.enum) as 'Current Phase',ot.enum as 'Order Type', o.ID,scheduled_date as 'Scheduled' ,opened_date as 'Opened' FROM orders o LEFT OUTER JOIN orders_types ot ON o.Type = ot.ID LEFT OUTER join orders_stage osn on o.stageID=osn.ID AND o.Type = 1 LEFT OUTER JOIN orders_stage_removal osr on o.stageID=osr.ID AND o.Type = 2 LEFT OUTER JOIN orders_stage_redo osre on o.stageID=osre.ID AND o.Type = 3 LEFT OUTER join orders_enum_install oen on o.enumID=oen.ID AND o.Type = 1 LEFT OUTER JOIN orders_enum_removal oer on o.enumID=oer.ID AND o.Type = 2 LEFT OUTER JOIN orders_enum_redo oere on o.enumID=oere.ID AND o.Type = 3
Vous ne pouvez pas utiliser de cas expression i> pour rejoindre conditionnellement des tables différentes. Est-ce que tu joins à la place.
Même je tfhere était une syntaxe qui vous a permis de le faire (vous pouvez essayer dynamique SQL), cela signifierait que pour différentes valeurs de
ordre.Typeid code> dans différentes lignes, vous auriez des colonnes différentes. C'est bien sûr impossible.
Ceci est une FAQ. S'il vous plaît avant d'envisager de poster lire votre manuel et / ou votre manuel & Google Toute erreur d'erreur ou de nombreuses phrases claires, concises et précises de votre question / problème / de votre objectif, avec et sans vos chaînes / noms et site: Stackoverflow.com; lire de nombreuses réponses. Si vous postez une question, utilisez une phrase comme titre. Reflètent vos recherches. Voir Comment demander et les textes de stockage de la flèche votant.
Vous ne dites pas ce que vous voulez faire. Donner du code sans signification ne communique pas vos pensées. Utilisez suffisamment de mots, de phrases et de références à des éléments d'exemples pour dire clairement et parfaitement ce que vous voulez dire. Lorsque vous donnez une relation d'entreprise (navire) / association ou table (base ou résultat de la requête), dites quelle ligne d'État indique la situation des affaires en termes de valeurs de colonne. S'il vous plaît dans les questions de code donnez un Exemple de reproductible minimal - comprenant des données minimales et des données minimales de colle et de représentation minimale donnée comme code. Pour SQL qui inclut le DBMS & DDL, y compris les contraintes, les index et l'initialisation tabulaire.