Topic: Как вбить в одну таблицу несколько значений из другой таблицы?

Возможно ли вывести в Grid данные при таких условиях? Пример:
---------------------------------------------
Таблица1: (является словарем)
1. "№ кабинета"
---------------------------------------------
Таблица2: (является словарем)
1. "Марка принтера",
2. "Зав. № принтера",
3. "Тип принтера".
--------------------------------------------
Таблица3:
1. "№ кабинета"                         (связь с табл.1 - поле1)
2. "Принтер на раб. месте1"     (связь с табл.2 - поле 1)
3. "Принтер на раб. месте2"     (связь с табл.2 - поле 1)
..............................................................................................
Должно получится на выходе:
--------------------------------------------------------------------------------------------------------------------------------------------
№ кабинета | Принтер на раб.месте1 | Зав.№ принтера | Принтер на раб.месте2 | Зав.№ принтера |
--------------------------------------------------------------------------------------------------------------------------------------------
302               | Samsung                         | 555444                 | Epson                              | 456789                |
-------------------------------------------------------------------------------------------------------------------------------------------
Как правильно в "таблицу3" забить в "поле2" и "поле3" данные с "таблицы2"?
Как все это вывести в Grid? Выводится либо только ID (вместо Epson), либо одинаковые значения (если делать только одно поле связи), либо одно из значений. Возможно ли это в принципе? Или есть другая схема заполнения.

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

.

Post's attachments

Attachment icon test.7z 3.52 kb, 291 downloads since 2019-12-14 

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

То что надо. Спасибо!!!
Одно не могу решить: если взять что "марка принтера" выбирается из еще одной таблицы словаря. Как в этом случае быть? Как сформировать тогда "Вычисляемое поле". Перебрал разные варианты, но что то никак.... HELP!

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

Удалось сделать только испотьзуя в вычислительном поле:
select
(case when id = 5 then 'samsung' when id =4 than 'Epson' end)
From table4

Но понимаю что это не самое оптимальное решение и при большом количестве данных все это будет затруднительно, да и если в этот id забьют другую модель то придется исправлять код.
Какие еще варианты здесь можно применить?

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

tefix wrote:

Удалось сделать только испотьзуя в вычислительном поле:
select
(case when id = 5 then 'samsung' when id =4 than 'Epson' end)
From table4

Но понимаю что это не самое оптимальное решение и при большом количестве данных все это будет затруднительно, да и если в этот id забьют другую модель то придется исправлять код.
Какие еще варианты здесь можно применить?

не совсем понимаю, что именно Вам нужно..
если Вы используете связь с таблицей, то:
у каждой связи есть внешний ключ = таблица1_id.таблица2
в это ключе хранится id записи из таблица2 
поместить туда id записи с которой Вы хотите создать связь можно либо скриптом либо с помошью компонента comboBox..

6 (edited by sibprogsistem 2019-12-16 09:01:00)

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

tefix wrote:

То что надо. Спасибо!!!
Одно не могу решить: если взять что "марка принтера" выбирается из еще одной таблицы словаря. Как в этом случае быть? Как сформировать тогда "Вычисляемое поле". Перебрал разные варианты, но что то никак.... HELP!

внешний ключ таблицы всегда равен id  связанной записи можно просто написать  WHERE таблица1.id= таблица2.id_таблица1

7 (edited by tefix 2019-12-16 14:28:26)

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

Давайте рассмотрим на прошлом примере: как вывести в гл.таблицу модель принтера на "раб. месте 2" ?
Я убрал поле "модель" принтера, и вместо него сделал выпадающий список.
https://cloud.mail.ru/public/GbLK/5dKXqd5w7

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

используйте подзапрос

(SELECT model_printer FROM d WHERE id=(SELECT id_d FROM b WHERE id=c.id_b1))  

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

ВООООООООО, это оно... спасибо!
Пипец сложно когда не знаешь синтаксиса(((

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

Ребята, а как теперь SQL поиск создать по этим вычислительным полям?
У меня в проекте по одному полю ищет данные по нескольким полям разных таблиц.
Я использовал запрос:

SELECT поле1, поле2, поле3
FROM Table1
LEFT OUTER JOIN Table2 ON Table2.id=Table1.id_Table2 

1. Но как использовать в SQL-запросе вычислительное "поле2" (или как заменить это поле другим запросом)?
2. Как все это сделать если у меня  одинаковые название полей под разными внешними ключами?
Прикрепляю проект, может кто разберется и покажет пример))?  Задание в прикрепленном проекте
https://cloud.mail.ru/public/4btK/7YFY9cmzN

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

Вопрос актуальный, может кто поможет хотя б по одному полю как сформировать SQL-запрос по моему примеру, дальше по аналогии думаю разберусь.

12 (edited by sibprogsistem 2019-12-20 18:47:03)

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

примерно так

SELECT 
a.office,
(SELECT model FROM b WHERE b.id=c.id_b),
(SELECT number FROM b WHERE b.id=c.id_b),
(SELECT type FROM b WHERE b.id=c.id_b), 
(SELECT model FROM b WHERE b.id=c.id_b1),
(SELECT number FROM b WHERE b.id=c.id_b1),
(SELECT type FROM b WHERE b.id=c.id_b1)                                   
FROM                    
b 
LEFT OUTER JOIN  c ON b.id=c.id_b 
LEFT OUTER JOIN  a ON a.id=c.id_a 
WHERE
(CASE WHEN '{edit1}' = '' THEN 1=1 ELSE number LIKE '%{edit1}%' END) 

13 (edited by tefix 2019-12-21 07:57:13)

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

Теперь выводит в Grid как надо, но вот поиск работает только для "первого рабочего места", а вот "второе рабочее место" в поиске не участвует (то есть по второму внешнему ключу не ищет)...

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

Все понял, добавил для поиска в конце где: WHERE

(CASE WHEN '{edit1}' = '' THEN 1=1 ELSE (SELECT model FROM b WHERE b.id=c.id_b1) LIKE '%{edit1}%' END) 
(CASE WHEN '{edit1}' = '' THEN 1=1 ELSE (SELECT number FROM b WHERE b.id=c.id_b1) LIKE '%{edit1}%' END) 
(CASE WHEN '{edit1}' = '' THEN 1=1 ELSE (SELECT type FROM b WHERE b.id=c.id_b1) LIKE '%{edit1}%' END) 

Остался такой нюанс небольшой: можно ли выводить результаты по этому поиску с сортировкой по конкретному столбцу? Сейчас в таблице сортировка по второму столбцу, а когда делаю поиск то сортирует по первому.

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

Здравствуй Tefix,
Добавьте это в конце вашего sqlquery -
order by 2;
Вы также можете использовать -
order by tablename.fieldname;
Другие варианты -
order by 2 desc;
order by tablename.fieldname desc;
Возможно, это помогает?
Derek
(с гугл переводчиком)

Re: Как вбить в одну таблицу несколько значений из другой таблицы?

Это мне помогло, огромное спасибо!!