«... Где поле ON (SELECT ..)» не работает с «select» в рабочем предложении where - PullRequest
0 голосов
/ 21 сентября 2018

Мне нужно выполнить запрос, который просматривает содержимое трех связанных таблиц:

Таблица a = контейнер данных, которые мы должны извлечь

Таблица b = родительская таблица, которая содержитидентификаторы, с которыми связаны таблицы a и c

Таблица c = таблица, содержащая данные о выполняемом условии

Тогда: b-> b.id-> on a.bid и b.bid

Я пытался сделать выбор следующим образом:

SELECT field_a
FROM a
WHERE field_b IN (SELECT b.id FROM b INNER JOIN c ON b.id = 1 WHERE c.aid = 1)

Запрос:

(SELECT b.id FROM b INNER JOIN c ON b.id = 1 WHERE c.aid = 1)

возвращает этот результат:

Array ([0] => Array ([id] => 1))

Потому что я не могу выполнить

"SELECT field_a FROM a WHERE field_b IN (SELECT ...)"

Если я попытаюсь сделать

"SELECT field_a FROM a WHERE field_b IN (1)"

, запрос работает, но мне нужно сначала извлечь его с помощью select

1 Ответ

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

Это должно быть эквивалентно вашему запросу:

SELECT field_a
FROM a
WHERE EXISTS(SELECT 1 FROM b
             JOIN c ON b.id = 1
             WHERE a.field_b = b.id
               AND c.aid = 1)

НО этот запрос:

SELECT 1 FROM b
JOIN c ON b.id = 1
WHERE a.field_b = b.id
 AND c.aid = 1

или

SELECT b.id FROM b INNER JOIN c ON b.id = 1 WHERE c.aid = 1

какты написал, это неправильно.Хотя он работает и дает правильный результат, предложение ON неверно - оно не имеет ничего общего с JOIN.Возможно, вы захотите использовать другой EXISTS здесь, но я очень не уверен, чего вы там добиваетесь ...

...