2017-03-02 5 views
0
select user_id,name, login,lastseen from users where user_id 
in((select friend_id from connections where user_id=1 and connection=1) 
union (select user_id from connections where friend_id=1 and connection=1)) 

Ich Wana, um einige Arbeit wie folgt zu tun, aber diese Abfrage zeigt Fehler. Wenn ich diese Unterabfrage unabhängig ohne Backets ausführe, funktioniert es gut. und auch, wie kann ich diese Abfrage schreibe die perforamancewie Union Union In sql Unterabfrage

+0

Bitte kennzeichnen, was speziell DB benutzt du. –

Antwort

1

Entfernen Sie die zusätzliche Klammern

select user_id,name, login,lastseen 
from users 
where user_id 
in (
    select friend_id 
    from connections 
    where user_id=1 and connection=1 

    union 

    select user_id 
    from connections 
    where friend_id=1 and connection=1 
    ) 
+0

danke Kumpel danke so sehr, das hat mir wirklich geholfen – user5921470

+0

als richtige Antwort markieren plz –

2

überspringen IN mit einem UNION, tut ein EXISTS statt zu erhöhen:

select user_id, name, login, lastseen 
from users u 
where exists (select 1 from connections c 
       where c.connection = 1 
       and ((u.user_id = c.friend_id and c.user_id = 1) or 
        (c.user_id = u.user_id and c.friend_id = 1))) 
+0

Können Sie erklären, warum das besser wäre (ich nehme an, schneller, aber kann nicht sehen, warum)? Ich fühle es weniger lesbar, also würde gerne verstehen, warum es besser ist. – NotCaring

+0

@Kamil, ich nehme an, es wird nur Verbindungstabelle einmal statt zweimal im Union-Fall lesen. (Da wir die dbms nicht kennen, kann ich nicht sicher sagen.) – jarlh