MySQL — Присвоение результатов SELECT во вложенном SQL-выражении SELECT переменным

В PHP-MySQL я использую вложенный оператор выбора следующим образом:

SELECT object_id FROM form_entry WHERE id=(SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer'))

Каждый SELECT возвращает только одну ячейку в результате. Тем не менее, мне нужен каждый результат этих SELECT, например, мне нужно (глубина 3):

SELECT id FROM oform_field WHERE name='dealer'

Также мне нужно (глубина 2):

SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer')

и мне нужно (глубина 1):

SELECT object_id FROM form_entry WHERE id=(SELECT entry_id FROM form_entry_values WHERE value='32711178-888' AND field_id = (SELECT id FROM form_field WHERE name='dealer'))

Есть ли способ присвоить результаты этих заявлений во время только одно исполнение самого большого запроса SQL (обозначается как «глубина 1»)? Другими словами, не выполняя три sql-запроса, я ищу способ присвоения результатов инструкций SELECT на каждой глубине такой переменной, как $ result_1, $ result_2 и т. Д.

Похоже, с этим не справиться, но заранее спасибо …

2

Решение

Ваш запрос эквивалентен:

SELECT e.object_id
FROM form_entry e
INNER JOIN form_entry_values v ON e.id=v.entry_id
INNER JOIN form_field f ON v.field_id = f.id
WHERE v.value='32711178-888'
AND f.name='dealer'

и в этой форме ответ прост: просто добавьте v.entry_id а также f.id к списку выражений в SELECT пункт:

SELECT e.object_id, v.entry_id, f.id
FROM form_entry e
INNER JOIN form_entry_values v ON e.id=v.entry_id
INNER JOIN form_field f ON v.field_id = f.id
WHERE v.value='32711178-888'
AND f.name='dealer'
3

Другие решения

попробуйте что-то вроде:

SELECT depth1.object_id, depth2.entry_id, depth3.id
FROM form_entry depth1
JOIN form_entry_values depth2 ON depth1.id=depth2.entry_id
JOIN form_field depth3 ON depth3.id=depth2.entry_id
WHERE
depth2.value='32711178-888'
AND depth3.name='dealer';
3

По вопросам рекламы [email protected]