Помогите с запросом БД - PullRequest
       27

Помогите с запросом БД

0 голосов
/ 01 декабря 2009

Итак, я настроил таблицу категорий. В этой таблице есть поля с именами «id», «name», «fk_parent_cat_id» (и другие). "Fk_parent_cat_id" в основном просто связывает одну конкретную категорию с родительской категорией.

Ok. При этом, как бы я сделать запрос, который собирает информацию о категории, но также собирает информацию о родительской категории. Моя главная проблема в том, что сейчас я только беру родительский идентификатор, что приятно, но я не хочу запускать другой запрос, чтобы определить имя родительской категории.

Обычный результат запроса будет выглядеть примерно так:

id: 2
name: category 1
fk_parent_cat_id: 1

И я хочу, чтобы результат был

id: 2
name: category 1
fk_parent_cat_id: 1
fk_parent_cat_name: top category

Имеет ли этот вопрос смысл? Я полагаю, что есть способ сделать это с помощью какого-то соединения ...

Спасибо за любой inptut!

Ответы [ 4 ]

3 голосов
/ 01 декабря 2009

Вы можете сделать это с помощью внутреннего соединения. Просто убедитесь, что имена ваших таблиц и столбцы внешнего ключа совпадают с именами в вашей базе данных (так как вы не предоставили информации относительно имен столбцов в таблице ParentCategory). Имейте в виду, что если у вас есть одна таблица категорий (то есть все ваши категории хранятся в одной таблице), то нет ничего плохого в самосоединении с одной и той же таблицей - вам просто нужно псевдонимы имен таблиц в вашем запросе, чтобы убедитесь, что они не являются двусмысленными.

SELECT
     C.id
,   C.name
,   C.category
,   P.parent_cat_name   
FROM
    ChildCategory C
INNER JOIN
    ParentCategory P
ON
    C.fk_parent_cat_id = P.parent_cat_id
1 голос
/ 01 декабря 2009
SELECT c.id, c.name, c.fk_parent_cat_id, p.name
FROM category c
left outer join category p on c.fk_parent_cat_id = p.id
1 голос
/ 01 декабря 2009

Использовать самостоятельное соединение в запросе.

SELECT t.id, t.name, t.fk_parent_cat_id, p.name fk_parent_cat_name
FROM table t INNER JOIN
table p on t.fk_parent_cat_id = p.id
0 голосов
/ 01 декабря 2009

Если я правильно понимаю, это базовое соединение

SELECT id, fk_parent_cat_id, fk_parent_cat_name 
FROM table, parent_table 
WHERE table.id = parent_table.id;

Исправьте имена таблиц с правильными именами, поскольку у вас их нет, и это также предполагает, что ваш первичный ключ в родительской таблице также просто называется 'id'.

Если я неправильно понимаю, поправьте меня в комментарии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...