ВЫБЕРИТЕ ПРИСОЕДИНЯЙТЕСЬ, ГДЕ запись не существует - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть 2 таблицы

id      name   type
1       aa     driver
2       bb     cyclist
3       cc     runner

parent_id      key      value
1              mobile   00299029
2              mobile   008772
2              active   1
3              mobile   09887
3              active   0

Мне нужно получить запись 1, аа, драйвер, ту, у которой нет записи со значением 'active' во второй таблице.Моя последняя попытка была примерно такой, но я не уверен, что буду хотя бы немного ближе к тому, что мне нужно, мой результат всегда 0 записей

SELECT t1.name as name
FROM table1 as t1
JOIN table2 as t2 ON t1.id = t2.parent_id
AND NOT EXISTS (
  SELECT * FROM table2
   WHERE key = 'active'
)

Ответы [ 7 ]

0 голосов
/ 21 ноября 2018

SELECT t1.id, t1.name, t1.type, t2.key, t2.value FROM table1 t1 ПРИСОЕДИНЯЙТЕСЬ к table2 t2 ON t1.id = t2.parent_id где t2.key <> 'active'

0 голосов
/ 21 ноября 2018
Select id,name,type from table1 
where id Not in
(Select 
 parent_id from table2 
 group by parent_id 
 having key= 
 'active') 

Лучше избегать объединения в этом случае, я бы сказал, так как подзапрос принесет пользу в этом случае.

0 голосов
/ 21 ноября 2018

Я думаю, что ваш запрос не работает в этом случае, попробуйте это

 SELECT name FROM table1 
 JOIN table2 ON table1.id = 
 table2.parent_id where id not IN ( SELECT parent_id 
 FROM 
table2 WHERE `key` = 'active' )
0 голосов
/ 21 ноября 2018

Вы можете использовать NOT EXISTS следующим образом:

select t1.name from table1 t1 
where not exists 
(
    select 1 from table2 t2 where t1.id = t2.parent_id  AND t2.key = 'active'
)
0 голосов
/ 21 ноября 2018

Это будет работать:

SELECT t1.name as name
FROM table1 as t1
JOIN table2 as t2 ON t1.id = t2.parent_id
AND t2.key  not like '%active%'
0 голосов
/ 21 ноября 2018

Только левое соединение может сделать

    SELECT t1.name as name
     FROM table1 as t1
LEFT JOIN table2 as t2 
       ON t1.id = t2.parent_id
      AND t2.key = 'active'
    WHERE t2.key IS NULL
0 голосов
/ 21 ноября 2018

Попробуйте это (я думаю, не совсем уверен, что понимаю связь):

SELECT t1.name as name
FROM table1 as t1
LEFT JOIN table2 as t2 ON t1.id = t2.parent_id and t2.key = 'active' where t2.key is null

A left join возвращает все элементы первой таблицы независимо от того, есть ли у них соответствующая запись в объединенной таблице,Включив t2.key is null в предложение where, вы ограничите его записями, которые существуют только в первой таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...