2016-12-07 3 views
-1

Я не понимаю, как этот запрос работал. Это какая-то продвинутая функция mysql, которую я не могу понять?Вы можете объяснить этот SQL-запрос?

select A.id from A where A.id in (select B.id from B where B.id = A.id) 
+0

Выберите 'id's который существуют как в A, так и B. – Blank

+0

Не так продвинутый. Коррелированный подзапрос. – jarlh

ответ

2

ненужный коррелируют подзапрос, который выборка всех строк, где идентификатор таблицы А соответствует идентификатору таблицы B. Это может также быть написано как

select id 
from A 
where id in (select id from B) 

(OR) Использованием INNER JOIN

select a.id 
from A a 
join B b on a.id = b.id; 

(ИЛИ) с использованием WHERE EXISTS

select a.id 
from A a 
where exists (select 1 from B where id = a.id); 
0

То, что вы видите, является подзапросом или вложенным запросом. Внутренний запрос дает массив результатов, а затем внешний запрос использует этот массив для фильтрации строк таблицы A.
Весь вопрос не имеет смысла, хотя ...
Лучше запрос будет:

SELECT A.id from A JOIN B ON A.id = B.id; 
0

это не просто ничто, но внутреннее соединение только

SELECT A.id from A INNER JOIN B ON A.id = B.id;