Помогите написать вложенный MySQL запрос...

  • Автор темы Guest111
  • Дата начала

Guest111

Guest
Помогите написать вложенный MySQL запрос...

В общем имеется 2 таблицы:
first_table
second_table

В первой хранится структура категорий:
Код:
p_parent | p_child
    0    |    1
    0    |    2
    0    |    3
    1    |    4
    2    |    5
Во второй (second_table) хранятся имена этих категорий:
Код:
p_id | name
  1  | nm1
  2  | nm2
  3  | nm3
Как написать запрос, который бы возвращал p_id, name из второй таблицы, предварительно взяв все p_parent = 0 из первой?

Т.е. алгорит здесь такой:
1. Берём все p_parent равные "0"
2. В соответствии каждому p_parent поставлено p_child => это p_id который нужно взять из второй таблицы
3. Вывести p_id, name второй таблицы

Как это можно сделать?
Я пробовал что-то вроде:

Код:
SELECT p_id, p_name FROM second_table A WHERE A.p_id = ( SELECT p_child FROM first_table B WHERE B.p_parent = '0' )
Только ошибку возвращает:
Код:
Subquery returns more than 1 row
Я-то понимаю что она значит, но как разрешить её не знаю. Предполагаю, что дополнительным условием это решается, но где и как??

Заранее спасибо.

-~{}~ 01.12.05 09:31:

Хм, похоже я справился..
Код:
SELECT p_id, p_name FROM second_table A WHERE A.p_id = ( SELECT p_child FROM first_table B WHERE B.p_child = A.p_id AND B.p_parent = '0' )
скажите, насколько этот запрос корректен? можно ли его как-то оптимизировать?
 

zerkms

TDD infected
Команда форума
SELECT t1.*, t2.* FROM first_table t1 INNER JOIN second_table t2 ON t2.p_id = t1.p_child WHERE t1.p_parent = 0

(не проверял)
 

Steamroller

Новичок
Вам наверно надо материалы почитать по самым основам SQL.
Тут не нужно вложенного запроса. Тут нужен join:

SELECT second_table.p_id, second_table.p_name
FROM first_table, second_table
WHERE first_table.p_parent = 0
AND first_table.p_child = second_table.p_id
 
Сверху