Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] SQLite: подтянуть данные из одной табл. в другую даже при отстутствии данных

Ответить
Настройки темы
Прочие БД - [решено] SQLite: подтянуть данные из одной табл. в другую даже при отстутствии данных

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Доброго времени суток! Пытаюсь подтянуть данные одной таблицы в другую, то есть примерно соединить данные двух таблиц по общему столбцу. Все получилось просто, но результат оказался не тот, что нужен. Таблицы all_pc_result и all_users_result, общий столбец WorkstationName. В результате получилась таблица с пересечениями. Но моя цель, не только пересечения, а именно к all_pc_result подтянуть данные из all_users_result, даже если в all_users_result нет данных. Пример: all_pc_result содержит 11775 записей, а all_users_result содержит 9020 записей, в итоге пересечений получилось 8806. А требуется, чтобы новая таблица содержала 11775 записей и там где данных в таблице all_users_result для этого WorkstationName не нашлось, поля просто остались пустыми. То есть я не хочу терять данные только из-за того, что в другой таблице не нашлось чего присоединить.
Запрос
Код: Выделить весь код
"CREATE TABLE IF NOT EXISTS all_pc_users AS
select Data,
  Ping,
  Region,
  B_S_TT,
  System_Unit_Name,
  System_Unit_Manufacturer,
  System_Unit_Model,
  Motherboard_SN,
  Adapter_IPv4,
  Adapter_Mac,
  Adapter_Name,
  Adapter_Type,
  Adapter_Speed,
  Monitor_1_model,
  Monitor_1_SN,
  Monitor_2_model,
  Monitor_2_SN,
  Router_Manufacturer,
  Router_Model,
  Router_SN,
  Processor,
  DDRx,
  kolichestvo_Slots_all,
  kolichestvo_Slots_free,
  PhysicalMemory_all,
  Slot_1_size,
  Slot_1_speed,
  Slot_1_manufacturer,
  Slot_2_size,
  Slot_2_speed,
  Slot_2_manufacturer,
  Slot_3_size,
  Slot_3_speed,
  Slot_3_manufacturer,
  Slot_4_size,
  Slot_4_speed,
  Slot_4_manufacturer,
  OS,
  x64_x86,
  disk_1_name,
  disk_1_size,
  disk_1_type,
  disk_2_name,
  disk_2_size,
  disk_2_type,
  disk_3_name,
  disk_3_size,
  disk_3_type,
  disk_4_name,
  disk_4_size,
  disk_4_type,
  shk,
  webcam,
  Unix_Time,
  lastLogonTimeStamp,
  whenChanged,
  all_logon,
  user_1,
  user_1_logon,
  user_2,
  user_2_logon,
  user_3,
  user_3_logon
from all_pc_result 
join all_users_result 
    on all_pc_result.System_Unit_Name = LOWER(all_users_result.WorkstationName);"

Отправлено: 10:25, 11-10-2021

 

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Оказалось все банально и я не понял документацию, эта функция left join

Отправлено: 20:53, 11-10-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Есть такая же ситуация, но тут не получилось.
Есть таблица AD_list к ней подтягиваю данные из all_pc, общий столбец System_Unit_Name.
запрос
Код: Выделить весь код
CREATE TABLE IF NOT EXISTS all_pc_result_test AS
SELECT *
FROM AD_list
right join all_pc USING(System_Unit_Name)
WHERE Ping <> 'No'
GROUP BY System_Unit_Name HAVING max(printf('%s-%s-%s', substr(Data, length(Data) + 1, -4), substr(Data, instr(Data, '.') + 1, 2), substr(Data, 1, 2)));

На выходе получаю 11700 записей, но AD_list содержала 13800 записей, значит я получил не тот результат.
Я подозреваю, что это из-за GROUP BY, но там важные нужные мне условия выборки из таблицы all_pc. Как быть?

Последний раз редактировалось Griboed0ff, 11-10-2021 в 21:21.


Отправлено: 21:13, 11-10-2021 | #3


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


удалось только разбить на два запроса и получить нужный результат
Первый:
Код: Выделить весь код
CREATE TABLE IF NOT EXISTS all_pc_result22 AS
SELECT *
FROM all_pc
WHERE Ping <> 'No'
GROUP BY System_Unit_Name HAVING max(printf('%s-%s-%s', substr(Data, length(Data) + 1, -4), substr(Data, instr(Data, '.') + 1, 2), substr(Data, 1, 2)));
Второй:
Код: Выделить весь код
CREATE TABLE IF NOT EXISTS all_pc_result_test AS
SELECT *
FROM AD_list
left join all_pc_result22 
on AD_list.System_Unit_Name = all_pc_result22.System_Unit_Name;
Как сделать одним запросом пока непонятно..

Разобрался:
Код: Выделить весь код
CREATE TABLE IF NOT EXISTS all_pc_result_test AS
SELECT *
FROM AD_list
left join (SELECT *
FROM all_pc
WHERE Ping <> 'No'
GROUP BY System_Unit_Name HAVING max(printf('%s-%s-%s', substr(Data, length(Data) + 1, -4), substr(Data, instr(Data, '.') + 1, 2), substr(Data, 1, 2)))) AS all_pc_result22 
on AD_list.System_Unit_Name = all_pc_result22.System_Unit_Name;
Не знаю почему, но днем не получалось, а вечером вдруг прояснилось и получилось.

Отправлено: 21:31, 11-10-2021 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - [решено] SQLite: подтянуть данные из одной табл. в другую даже при отстутствии данных

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - Как перенести данные одной учетной записи (настройки браузера Edge) в другую Alex_On_ Microsoft Windows 10 3 16-09-2018 19:28
2010 - Экспорт данных из одной книги excel в другую Tyamich Microsoft Office (Word, Excel, Outlook и т.д.) 5 27-10-2016 16:31
2010 - Макрос переноса всех данных из одной рабочей книги в другую Invincible Microsoft Office (Word, Excel, Outlook и т.д.) 4 14-06-2013 21:12
Route/Bridge - Маршрутизация из одной подсети в другую. thomas_aspried@vk Сетевые технологии 3 06-03-2013 18:45
Использование - Передача лицензий из одной организации в другую Daemon.XP Лицензирование продуктов Microsoft 2 09-12-2009 08:41




 
Переход