2016-10-20 1 views
0

Hey, also habe ich eine Frage, die mich überrascht, ich kann nicht leicht eine Antwort für finden. Im Grunde versuche ich nur einer Tabelle beizutreten und nur wenn ein Wert gleich 1 ist. Ich habe versucht, Fallanweisungen zu verwenden, aber das wird nicht funktionieren, also bin ich in einer Sackgasse und würde einige Vorschläge sehr schätzen.Join nur wenn ein Wert gleich 1 ist

Grundsätzlich habe ich eine übergebene Tabelle @courseSection und eine lokale Variable @isSelect all = 0. So jetzt möchte ich überprüfen, ist ein -1 in der @ courseSection Tabelle.

Pseudo-Code:

 If @courseSection contains -1 then 
     @isSelectAll = 1 
     end 

     if @isSelect all = 1 then 
     inner join course s on c.id = cs.id 
     end 

Das ist alles in einer zu Select-Anweisung. Hat jemand einen Vorschlag, wie das zu erreichen ist und danke im Voraus für die Hilfe.

+2

Sie könnten es in Ihrem 'ON' auf irgendeine Weise einschließen -' INNER JOIN Kurs s ON c.id = cs.id UND @isSelectAll = 1'. Das heißt, Sie müssen dann eventuell den Join zu einem 'LEFT JOIN' mit einem' IS NOT NULL' ändern, da Ihr 'INNER JOIN' 0 Einträge findet, wenn' @isSelectAll <> 1' ist. – Santi

+2

Oracle? MS-SQL? MySQL? Benötigen Sie weitere Informationen. – gdoron

Antwort

0

Sie müssen dynamische Abfrage verwenden, können Sie nicht Join Tabellen basierend auf CASE Auswertung.

Declare @sql varchar(max)= '' 

Set @sql = 'your current query without join' 

Set @sql += case when @isSelect all = 1 then ' inner join course s on c.id = cs.id ' 
      else '' end 

--print @sql 
Exec (@sql) 
0

Wenn Sie nur manchmal die beitreten wollen, dann müssen Sie keine dieser Spalten aus der verknüpften Tabelle verwenden, und tun das nur als Filter kommen - sonst macht es keinen Sinn machen.

Wenn das der Fall war, dann anstelle eines join, tun ein in oder exists:

select * from MyTable 
where (@isSelectall <> 1 or id in (select id from course)) 

Wenn Sie tatsächlich sind einige der Spalten von course verwenden, dann würden Sie die left join zu tun haben, aus dem Kommentar oder dynamische SQL wie die andere Antwort.

Verwandte Themen