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

0

Итак, у меня есть таблица категорий. Внутри этой таблицы есть поле "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!

Теги:
database

4 ответа

3
Лучший ответ

Вы можете выполнить это с помощью INNER JOIN. Просто убедитесь, что имена ваших таблиц и столбцов внешнего ключа - это то, что они на самом деле находятся в вашей базе данных (поскольку вы не указали информацию о именах столбцов в таблице 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
  • 0
    Здорово. Это должно работать. Это одна таблица категории между прочим. Я думаю, что мне нужно провести исследование всех существующих типов соединений. Я всегда имел представление о том, о чем они, просто нужно начать использовать их сейчас, когда я создаю все виды реляционных баз данных с объединением таблиц и тому подобное ..
1

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

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
1
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
0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню