Как сделать что-то вроде джойна из таблицы в ту же самую таблицу?
SELECT GD_Citizen_ClassifierBase.Id, GD_Citizen_ClassifierBase.Name, GD_Citizen_ClassifierBase.Topic FROM GD_Citizen_ClassifierBase |
SELECT GD_Citizen_ClassifierBase.Id, GD_Citizen_ClassifierBase.Name, GD_Citizen_ClassifierBase.Topic FROM GD_Citizen_ClassifierBase
Вопросы и их тематики хранятся в одной и той же таблице. Как вывести вопрос и рядом вместо id тематики имя тематики из этой же таблицы?
Дополнительно:
SELECT q.*, s.Name AS SectionName, t.Name AS TopicName, th.Name AS ThemeName FROM GD_Citizen_ClassifierBase AS q JOIN GD_Citizen_ClassifierBase AS s ON s.id = q.Section JOIN GD_Citizen_ClassifierBase AS t ON t.id = q.Topic JOIN GD_Citizen_ClassifierBase AS th ON th.id = q.Theme |
SELECT q.*, s.Name AS SectionName, t.Name AS TopicName, th.Name AS ThemeName FROM GD_Citizen_ClassifierBase AS q JOIN GD_Citizen_ClassifierBase AS s ON s.id = q.Section JOIN GD_Citizen_ClassifierBase AS t ON t.id = q.Topic JOIN GD_Citizen_ClassifierBase AS th ON th.id = q.Theme
- Разобрался, благодарю!!
Ответы:
Еще бы какой-то атрибут добавить, чтобы тип записи различать - тогда жить можно.
select t1.*, -- тематики t2.* -- вопросы from table_1 t1 join table_1 t2 on t2.topic = t1.id where t1.topic is null and t1.Name like 'Тематика%' -- не хватает атрибута type, чтобы различать раздел от тематики |
select t1.*, -- тематики t2.* -- вопросы from table_1 t1 join table_1 t2 on t2.topic = t1.id where t1.topic is null and t1.Name like 'Тематика%' -- не хватает атрибута type, чтобы различать раздел от тематики
-
Еще бы какой-то атрибут добавить, чтобы тип записи различать - тогда жить можно
Дык есть... TOPIC IS NULL - для категорий TRUE, для вопросов FALSE.
- А разделы как определять?
- alexalexes, Все атрибуты что есть, но нет ни одного, по которому можно было бы определить вопрос это или тематика, или что то еще
Я пробовал что то подобное, не получается
- Misuta, Всё есть, только неявно. Если id этой строки есть где-то в колонке Section, то это раздел.
- Понял, сквозной Id для нескольких подклассов сущностей.
Все равно тут нормализация напрашивается.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос



Для выполнения операции, подобной джойну таблицы саму с собой в SQL, можно использовать концепцию подзапроса (subquery) или временной таблицы. Вот примеры обоих методов:
1. Использование подзапроса (subquery):
SELECT t1.column1, t1.column2, t2.column1, t2.column2 FROM table_name t1 JOIN (SELECT column1, column2 FROM table_name) t2 ON t1.column1 = t2.column1;
В данном примере мы выбираем столбцы из таблицы `table_name` дважды, первый раз как `t1` и второй раз как `t2`. Мы затем объединяем эти две таблицы по общему столбцу `column1`.
2. Использование временной таблицы:
CREATE TEMPORARY TABLE temp_table SELECT column1, column2 FROM table_name; SELECT t1.column1, t1.column2, t2.column1, t2.column2 FROM table_name t1 JOIN temp_table t2 ON t1.column1 = t2.column1; DROP TEMPORARY TABLE temp_table;
Здесь мы сначала создаем временную таблицу `temp_table`, копируя в нее необходимые столбцы из основной таблицы. Затем мы присоединяем основную таблицу к временной таблице по общему столбцу `column1`. Наконец, мы удаляем временную таблицу, чтобы не захламлять базу данных.
Оба метода будут работать и позволят вам проводить операции джойна таблицы с самой собой в SQL. Однако, выбор конкретного метода зависит от ваших предпочтений и особенностей вашей базы данных.