2 Stimmen

Abwählen der vorherigen Auswahl

Ich weiß nicht, es kann seltsam klingen... aber hier ist meine Situation... Ich muss Zeilen aus zwei Tabellen (Tabelle1) und (Tabelle2) auswählen

Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>

Aber meine Einschränkung ist Wenn Tabelle1 / Tabelle2 0 (null) Zeilen zurückgeben... sollte ich überhaupt keine Ergebnisse zurückgeben.

Das heißt... Wenn der erste Select sagen wir 10 Zeilen zurückgibt und der zweite Select 0 (null) Zeilen zurückgibt, sollte ich den ersten Select auch zurückrufen...

Sind die Temp-Tabellen die einzige Lösung, oder gibt es eine andere Alternative?

Vielen Dank im Voraus für Ihre Antwort...

  • Raja

1voto

AdaTheDev Punkte 135097

Eine Möglichkeit besteht darin, zuerst ein IF EXISTS durchzuführen:

IF EXISTS(SELECT * FROM Table1 WHERE....) AND EXISTS(SELECT * FROM Table2 WHERE....)
    BEGIN
        -- Now do your SELECT on each, as both return results
    END

EXISTS sollte eine gute Leistung erbringen, da es anhält, sobald es einen passenden Datensatz findet.

0voto

Aaron Punkte 6808

Ohne nähere Angaben zu Ihren spezifischen Fragen, ist dies eine Möglichkeit. Solange Ihre Abfragen nicht zu komplex und nicht sehr intensiv sind, sollte dies funktionieren:

Select * from Table1 Where <SomeCondition>
where exists( Select null from Table2 Where <SomeCondition> );
Select null from Table2 Where <SomeCondition>
where exists ( Select null from Table1 Where <SomeCondition> );

Dadurch werden in jeder Anweisung nur dann Zeilen ausgewählt, wenn die andere Anweisung auch eine beliebige Anzahl von Zeilen größer als Null zurückgibt.

0voto

Anton Gogolev Punkte 109749

Eine offensichtliche, aber nicht sehr wirksame Lösung wäre count Anzahl der Zeilen zuerst (die Syntax ist nicht ganz klar):

if not exists(select id from Table1 where ...) or not exists(select id from Table1 where ...)
    return

Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>

0voto

edosoft Punkte 16631

Wenn Sie gespeicherte Prozeduren verwenden können, können Sie @@rowcount verwenden, um zu prüfen, ob die zweite Abfrage Ergebnisse geliefert hat:

create proc pTest
as

Select * from Table1 Where <SomeCondition>

Select * from Table2 Where <SomeCondition>
if @@rowcount = 0 return

go

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X