объединение доставленной таблицы с самим собой

#mysql

#mysql

Вопрос:

Есть такие таблицы

 create table a (id int,pid int);
insert into a values
(1, NULL),
(2,1),
(3,5);

create table b (aid int);
insert into b values
(1),
(2),
(3);
 

и запрос

 select * 
from 
  (select distinct aid as id 
     from b
  ) as t
left join a using(id)
 

Результат

 id  pid
1   (null)
2   1
3   5
 

Я хочу удалить записи, pid которых присутствуют в таблице t как id. В случае — запись с идентификатором 2

Я пытался использовать

 where not exists (select id from t where t.id = a.pid)
 

и

 left join t t2 on t2.id = a.pid
 

но в обоих случаях возникает ошибка 1146 — Таблица не существует, потому что t является доставленной таблицей

Надеюсь сделать это в одном запросе. Любая помощь будет оценена

sqlfiddle

Комментарии:

1. таблица поиска b , where not exists (select 1 from b where b.aid = a.pid)

2. кажется, вы правы — спасибо

Ответ №1:

MySQL, конечно, правильный, t не существует, но поскольку t является производным от b, и вы хотите видеть только, что есть какая-либо идентичная помощь, вы должны использовать это вместо,

таким образом, вы получаете

 select * 
from 
  (select distinct aid as id 
     from b
  ) as t
left join a using(id)
where not exists (select NULL from b where b.aid = a.pid)
 

Смотрите пример http://sqlfiddle.com /#!9/9bf8666/14