2016-05-19 16 views
1

Ich habe die folgende SQL-Abfragesql erhalten Spalte von der ‚VORHANDEN‘ statemenent

SELECT Store.* 
FROM Store 
WHERE EXISTS (
    SELECT Contest.StoreID .....) 
OR EXISTS (
    SELECT Discount.StoreID .....) 

mein Problem ist, dass ich zu den Ergebnissen einiger Spalten aus dem Wettbewerb und der Discount-Arrays enthalten sein soll. Wenn ich sie auf der FROM beitreten, funktioniert es, aber gibt es eine Möglichkeit, die Werte von EXISTS zu bekommen? so etwas wie dies

SELECT Store.*, t1.something, t2.somethingElse 
FROM Store 
WHERE EXISTS (
    SELECT Contest.StoreID .....) t1 
OR EXISTS (
    SELECT Discount.StoreID .....) t2 
+4

Nein, das ist nicht möglich. Sie müssen die Tabellen "JOIN", um Zugriff auf ihre Felder zu haben. –

+2

Absolut nicht. Über die where-Klausel werden keine Daten an die Abfrage zurückgegeben. Und Tabellen sind keine Arrays :) –

Antwort

2

Keine, es ist nicht möglich, aus der WHERE Klausel zu wählen, denken Sie darüber nach, diese Klausel, wenn für die Filterung.

Es gibt zwei Möglichkeiten, Daten aus verschiedenen Tabellen zusammen auszuwählen: sub query oder join. Hier

ist ein JOIN Beispiel:

SELECT s.*, t1.something, t2.somethingElse 
FROM Store s 
LEFT OUTER JOIN Contest t1 ON(...) 
LEFT OUTER JOIN Discount t2 ON(...) 
WHERE t1.<column> is not null OR t2.<column> is not null 

Dies tut das gleiche wie Ihre Abfrage mit den EXISTS(), und wird wahrscheinlich ein ähnliche Leistung.

Kann auch wir eine Abfrage korrelierten Unter erfolgen:

SELECT * FROM (
    SELECT s.*, 
      (SELECT t1.something FROM contest t1 WHERE t1.<col> = s.<col>) as col1,      
      (SELECT t1.something FROM contest t1 WHERE t1.<col> = s.<col>) as col2, 
    FROM Store s) t 
WHERE t.col1 is not null or t.col2 is not null 
+0

JOINs sind wahrscheinlich der einfachste Weg für weniger erfahrene Benutzer. – Wh1T3h4Ck5

+0

Ich weiß, aber wenn er mit Joins bereits vertraut ist, sollte er sein Wissen erweitern @ Wh1T3h4Ck5 – sagi

+0

Korrelierte Unterabfragen können auch schlecht für die Leistung sein. –

Verwandte Themen