2017-02-22 7 views
0

Как я могу сделать эту работу? У меня есть таблица u_uzivatele, и я хочу присоединиться к ней на столе b_objednavky, но также я не хочу, чтобы строки из таблицы u_uzivatele были соединены, которые могут быть соединены с таблицей bw_paid_orders и не соответствуют статье WHERE. Прямо сейчас оператор SELECT возвращает таблицу с строками из таблицы uzivatele, которые также находятся в таблице bw_paid_orders и соответствуют критериям в предложении WHERE. Но я не могу присоединиться к нему в таблице u_uzivatele, потому что возвращено несколько строк.Подключить таблицу к инструкции SELECT

SELECT STMT 

FROM b_objednavky INNER JOIN u_uzivatele ON b_objednavky.uzivatel = 
( 
     SELECT u_uzivatele.id 
     FROM u_uzivatele 
     JOIN bw_paid_orders 
     ON  u_uzivatele.id = bw_paid_orders.user_id 
     WHERE bw_paid_orders.active_thru < now() + interval '6 months') uzivatele 
+2

'выберите ... из таблицы присоединиться (подзапрос) на ...' – jarlh

+0

, где я должен использовать выбрать, что вы предлагаете? .. В принципе я хочу присоединиться к таблице на вложенный запрос – jemcaj

+0

См ответ a_horse_with_no_name в ниже. – jarlh

ответ

2

Вы хотите присоединиться только u_uzivatele записи, для которых не существует определенную запись в bw_paid_orders. Поэтому используйте NOT EXISTS или проще NOT IN.

select ... 
from b_objednavky o 
join u_uzivatele u on u.id = o.uzivatel 
        and u.id not in (select user_id from bw_paid_orders po 
            where active_thru < now() + interval '6 months') 
+0

Это похоже на то, что мне нужно. Но в целом он по-прежнему не работает, мне нужно проверить, возвращает ли это что-то еще, а затем я хочу – jemcaj