2009-10-07 9 views
1

J'ai un scénario comme, je dois ajouter ma jointure dans conditionnelJointures dans une instruction conditionnelle dans SQL Query

par exemple. Lorsque la valeur est 1 rejoindre ensuite intérieur de déposer une et si la valeur 2 puis jointure interne à la table

ci-dessous est mon exemple de requête et je reçois erreur syntaxe incorrecte près du mot-clé « intérieur »

DECLARE @i INT=1 
select name from emp 
if(@i=1) 
begin 
inner join a on a.ID=emp.ID 
end 
else if(@i=1) 
begin 
inner join b on b.ID=emp.ID 
end 
where emp.ID=2 

Merci

Répondre

4

Est-ce que cela fonctionnerait? Jointure externe deux tables dans les conditions et mettre le conditionnel dans votre clause select comme ceci:

select name, case when @i=1 then a.column else b.column end from emp 
left outer join a on a.ID=emp.ID 
left outer join b on b.ID=emp.ID 
where emp.ID=2 
+0

Cela pourrait produire des enregistrements supplémentaires, en raison de la jointure supplémentaire. – mjv

+0

Bonne idée +1, son travail pour moi merci –

0

Comme vous avez découvert la construction est illégale dans SQL. Une instruction IF ne peut pas être incluse dans une requête DML. On peut, cependant, écrire deux requêtes distinctes (introduisant dans le processus un peu de duplication) et avoir l'un ou l'autre sélectionné sous condition.

DECLARE @i INT 
SET @i=1 
if(@i=1) 
    begin 
     select name from emp 
     inner join a on a.ID=emp.ID 
     where emp.ID=2 
    end 
    else if(@i=2) 
    begin 
     select name from emp 
     inner join b on b.ID=emp.ID 
     where emp.ID=2 
    end 
+0

@mjv Merci ...... –

Questions connexes