С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/58: Рейтинг темы: голосов - 58, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 20.02.2012
Сообщений: 13

Сбор в один столбец запроса данных из столбцов 2-х разных таблиц.

20.02.2012, 17:04. Показов 11741. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Сразу оговорюсь - изменить базу данных не вариант, так как она уже есть и заполнена и работает + это бесплатный проект(GLPI), который должен без вопросов обновляться.

А теперь собственно вопрос. Есть база MySQL система заявок.
Есть 5 таблицы: glpi_tickets (заявки), glpi_computers (компьютеры), glpi_printers (принтеры), glpi_entities (организации), glpi_locations (местонахождение).
Структура таблиц:
1. glpi_tickets: id - номер; title - название; status - статус; itemtype - тип девайса; items_id - идентификатор девайса; entities_id - идентификатор организации.
2. glpi_computers - id - идентификатор; name - имя; locations_id - ID местонахождения.
3. glpi_printers - id - идентификатор; name - имя; locations_id - ID местонахождения.
3. glpi_entities - id - идентификатор; name - имя.
3. glpi_locations - id - идентификатор; name - имя.

Задача выбрать из tickets все заявки и сделать таблицу где есть номер заявки, имя заявки, тип устройства, ИМЯ УСТРОЙСТВА, организация (владелец устройства), местоположение устройства.
Проблема в том что имя надо выбирать из столбцов "name" 2-х разных таблиц (тип столбцов идентичен).
Я решил эту задачу путем UNION можно решить её подругому?

Решение без вывода Имени устройства:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
SELECT `glpi_tickets`.`id` AS ticket_id , 
    `glpi_tickets`.`name` AS title , 
    `glpi_tickets`.`status` AS STATUS, 
    `glpi_tickets`.`itemtype` AS itemtype, 
    `glpi_entities`.`name` AS entity, 
    `glpi_locations`.`name` AS location
FROM glpi_tickets 
LEFT JOIN `glpi_computers` ON (`glpi_tickets`.`items_id` =`glpi_computers`.`id`)
LEFT JOIN `glpi_printers` ON (`glpi_tickets`.`items_id` =`glpi_printers`.`id`)  
LEFT JOIN `glpi_entities` ON (`glpi_tickets`.`entities_id` =`glpi_entities`.`id`) 
LEFT JOIN `glpi_locations` ON (`glpi_computers`.`locations_id` =`glpi_locations`.`id`) OR (`glpi_printers`.`locations_id` =`glpi_locations`.`id`)
WHERE `glpi_tickets`.`id`<>0
результат:
ticket_id title status itemtype entity location
1 123 assign Printer Организация 2 Место 2
2 345 solved Printer Организация 3 Место 3
8 369 assign Monitor NULL Место 1
7 586 assign Computer Организация 1 Место 1
6 678 assign Computer NULL Место 1

Решение с выводом Имени устройства и UNION:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT `glpi_tickets`.`id` AS ticket_id , 
    `glpi_tickets`.`name` AS title , 
    `glpi_tickets`.`status` AS STATUS, 
    `glpi_tickets`.`itemtype` AS itemtype,
    `glpi_computers`.`name` AS name,
    `glpi_entities`.`name` AS entity, 
    `glpi_locations`.`name` AS location
FROM glpi_tickets 
JOIN `glpi_computers` ON (`glpi_tickets`.`items_id` =`glpi_computers`.`id`)
LEFT JOIN `glpi_entities` ON (`glpi_tickets`.`entities_id` =`glpi_entities`.`id`) 
LEFT JOIN `glpi_locations` ON (`glpi_computers`.`locations_id` =`glpi_locations`.`id`)
WHERE `glpi_tickets`.`itemtype`= "Computer"
UNION
SELECT `glpi_tickets`.`id` AS ticket_id , 
    `glpi_tickets`.`name` AS title , 
    `glpi_tickets`.`status` AS STATUS, 
    `glpi_tickets`.`itemtype` AS itemtype,
    `glpi_printers`.`name` AS name,
    `glpi_entities`.`name` AS entity, 
    `glpi_locations`.`name` AS location
FROM glpi_tickets 
JOIN `glpi_printers` ON (`glpi_tickets`.`items_id` =`glpi_printers`.`id`)
LEFT JOIN `glpi_entities` ON (`glpi_tickets`.`entities_id` =`glpi_entities`.`id`) 
LEFT JOIN `glpi_locations` ON (`glpi_printers`.`locations_id` =`glpi_locations`.`id`)
WHERE `glpi_tickets`.`itemtype`= "Printer"
результат:
ticket_id title status itemtype name entity location
7 586 assign Computer Computer 1 Организация 1 Место 1
6 678 assign Computer Computer 1 NULL Место 1
1 123 assign Printer Printer 2 Организация 2 Место 2
2 345 solved Printer Printer 3 Организация 3 Место 3

попытка решить без UNION

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT `glpi_tickets`.`id` AS ticket_id , 
    `glpi_tickets`.`name` AS title , 
    `glpi_tickets`.`status` AS STATUS, 
    `glpi_tickets`.`itemtype` AS itemtype,
    `glpi_printers`.`name` AS name,
        `glpi_computers`.`name` AS name,  
    `glpi_entities`.`name` AS entity, 
    `glpi_locations`.`name` AS location
FROM glpi_tickets 
LEFT JOIN `glpi_computers` ON (`glpi_tickets`.`items_id` =`glpi_computers`.`id`)
LEFT JOIN `glpi_printers` ON (`glpi_tickets`.`items_id` =`glpi_printers`.`id`)  
LEFT JOIN `glpi_entities` ON (`glpi_tickets`.`entities_id` =`glpi_entities`.`id`) 
LEFT JOIN `glpi_locations` ON (`glpi_computers`.`locations_id` =`glpi_locations`.`id`) OR (`glpi_printers`.`locations_id` =`glpi_locations`.`id`)
WHERE `glpi_tickets`.`id`<>0
результат
ticket_id title status itemtype name name entity location
1 123 assign Printer Printer 2 NULL Организация 2 Место 2
2 345 solved Printer Printer 3 NULL Организация 3 Место 3
8 369 assign Monitor Microsoft XPS Document Writer Computer 1 NULL Место 1
7 586 assign Computer Microsoft XPS Document Writer Computer 1 Организация 1 Место 1
6 678 assign Computer Microsoft XPS Document Writer Computer 1 NULL Место 1

то есть колонка имени "раздвоилась" как её соединить?

Извините, если сумбурно, я новичок, задавайте вопросы - уточню что непонятно.

Добавлено через 8 минут
Я бы выложил скрины, но что то не пойму как ...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2012, 17:04
Ответы с готовыми решениями:

Сбор данных из разных файлов в один
Добрый день. Стоит задача собирать данные из нескольких файлов с одинаковой структурой в один, имеющий аналогичную структуру. Имена файлов...

Сбор данных с разных xls таблиц в одну итоговую таблицу
Написан скрипт для сбора данных с разных xls таблиц в одну итоговую таблицу, но почему в итоговой таблице не выводит, подскажите что не так...

Сбор данных из разных таблиц по признаку зелёного цвета выделения
Стоит задача собрать единоразового данные из таблиц excel, они выделены зелёным цветом в этих таблицах и у конце каждого текста в этих...

5
1 / 1 / 0
Регистрация: 20.02.2012
Сообщений: 13
20.02.2012, 17:09  [ТС]
вот скрин табличек
Миниатюры
Сбор в один столбец запроса данных из столбцов 2-х разных таблиц.  
0
58 / 50 / 16
Регистрация: 23.06.2011
Сообщений: 122
20.02.2012, 18:52
А чем, собственно, UNION не устраивает...?
Можно сделать посредством создания переменной типа таблица.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--создали переменную
DECLARE @name_table TABLE
(
    first_feald INT,
    second_feald VARCHAR(20)
)
 
--вставили данные из первой таблицы
INSERT INTO @name_table (first_feald , second_feald)
SELECT ddd AS first_feald,
       ccc AS second_feald
FROM firstTable
 
--вставили данные из второй таблицы
INSERT INTO @name_table (first_feald , second_feald)
SELECT ddd AS first_feald,
       ccc AS second_feald
FROM secondTable
 
--вывели результат
SELECT @name_table
Добавлено через 13 минут
ой-ой-ой...затупил...последняя строчка:

SQL
1
SELECT * FROM @name_table
0
1 / 1 / 0
Регистрация: 20.02.2012
Сообщений: 13
20.02.2012, 19:32  [ТС]
не устраивает, то, что на сколько я понимаю он каждый раз будет по новой шерстить таблицу tickets, с учетом того что он будет ее пробегать для принтеров, мониторов, компьютеров, сетевого оборудования это будет 4 прохода, а хотелось бы все сделать за один.
и + код раздувается неимоверно.
ну и наконец просто очень интересно, я третий день голову ломаю как это можно сделать красиво.... я почему то уверен что есть красивое и простое решение этой задачки, вот только сам его пока не могу найти
0
1 / 1 / 0
Регистрация: 20.02.2012
Сообщений: 13
24.02.2012, 14:09  [ТС]
нашел решение. вдруг кому пригодиться.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
SELECT `glpi_tickets`.`id` AS ticket_id, 
`glpi_tickets`.`name` AS title , 
`glpi_tickets`.`itemtype` AS itemtype, 
`glpi_entities`.`name` AS entity, 
`glpi_locations`.`name` AS location, 
CASE `glpi_tickets`.`status` 
WHEN "new" THEN "новая" 
WHEN "assign" THEN "принята" 
WHEN "plan" THEN "запланирована" 
WHEN "waiting" THEN "решается" 
WHEN "solved" THEN "решена" 
WHEN "closed" THEN "закрыта" 
ELSE "unknown" 
END AS STATUS, 
CASE `glpi_tickets`.`itemtype`
WHEN "Printer" THEN `glpi_printers`.`name`
 WHEN "Computer" THEN `glpi_computers`.`name`
 WHEN "Monitor" THEN `glpi_monitors`.`name` 
WHEN "NetworkEquipment" THEN `glpi_networkequipments`.`name` 
ELSE "unknown" 
END AS name 
FROM glpi_tickets 
LEFT JOIN `glpi_printers` ON (`glpi_tickets`.`items_id` =`glpi_printers`.`id`) 
LEFT JOIN `glpi_computers` ON (`glpi_tickets`.`items_id` =`glpi_computers`.`id`) 
LEFT JOIN `glpi_monitors` ON (`glpi_tickets`.`items_id` =`glpi_monitors`.`id`) 
LEFT JOIN `glpi_networkequipments` ON (`glpi_tickets`.`items_id` =`glpi_networkequipments`.`id`) 
LEFT JOIN `glpi_locations` ON (`glpi_printers`.`locations_id` =`glpi_locations`.`id`) OR (`glpi_computers`.`locations_id` =`glpi_locations`.`id`) OR (`glpi_monitors`.`locations_id` =`glpi_locations`.`id`) OR (`glpi_networkequipments`.`locations_id` =`glpi_locations`.`id`) 
LEFT JOIN `glpi_entities` ON (`glpi_tickets`.`entities_id` =`glpi_entities`.`id`)
WHERE `glpi_tickets`.`id`<>0
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
24.02.2012, 14:14
Странно обсуждать запросы MySQL на форуме по MSSQL
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2012, 14:14
Помогаю со студенческими работами здесь

Как объединить два запроса с разных таблиц в один?
как объединить два запроса с разных таблицы в один сейчас есть вот такой запрос с выводом в таблицу, но как мы видим, таблицы просто...

SELECT - запрос: выбрать данные из двух таблиц из разных столбцов и поместить в один
Например есть две таблицы: // PERSONS1 &quot;1&quot; &quot;Коля&quot; &quot;2&quot; &quot;Маша&quot; и // PERSONS2 &quot;1&quot; &quot;Саша&quot; &quot;2&quot; ...

Перенос данных из разных столбцов в один
Добрый день. Подскажите пожалуйста как столбец A объединить с B, чтобы данные получились общие? Т.е. не слить слово+слово, а сделать так,...

Сведение данных с разных столбцов в один
Помогите, пожалуйста решить такую проблемку. Есть набор данных на листе в разных столбцах. Например А(1..10)=113 В(15...50)=777 ...

Выбор данных из разных таблиц в один dgv.
Наткнулся на проблему выбора данных из разных таблиц и запись в один datagridview. Собственно, есть две таблицы: 1) Model...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru