Как решить этот подзапрос путем соединения? - PullRequest
0 голосов
/ 01 ноября 2019

Этот запрос, который я хочу создать, создаст способ соединения SQL.

Select count(*) as testOffers From table1 Where posted_test_id in (Select post_test_id From 
table2 Where user_id = 367) AND is_test_offer=1;

Ответы [ 3 ]

0 голосов
/ 01 ноября 2019

Это эквивалентно:

Select count(*) as testOffers
From table1 t1 join
     (Select distinct post_test_id 
      From table2
      Where user_id = 367
     ) t2
     on t1.posted_test_id = t2.post_test_id
where t1.is_test_offer = 1;

Обратите внимание, что select distinct очень важно в подзапросе для того, чтобы оба семантически были эквивалентны. Это не нужно для in, потому что дубликаты не имеют значения.

Может оказаться, что select distinct не требуется в вашем конкретном случае. Это было бы потому, что подзапрос не возвращает дубликаты.

0 голосов
/ 01 ноября 2019

Попробуйте это:

SELECT count(*) as testOffers From table1  as t1
INNER JOIN table2 AS t2  ON t1.posted_test_id = t2.posted_test_id
WHERE t2.user_id = 367 AND t1.is_test_offer = 1;
0 голосов
/ 01 ноября 2019

Вы используете этот способ, используя подзапрос youn для предложения IN, таблицу для объединения

Select count(*) as testOffers 
From table1 
INNER JOIN  ( 
Select post_test_id From 
table2 Where user_id = 367) t ON t.post_test_id = table1.posted_test_id 
    AND table1.is_test_offer=1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...