|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Доброго времени суток! Есть справочная таблица MATERIALS: ID INTEGER PRIMARY KEY, NAME VARCHAR(20) Есть еще несколько справочных таблиц(6) с одинаковой структурой: ID INTEGER PRIMARY KEY, OUT INTEGER FK MATERIALS(ID) - Получаемый продукт, RES INTEGER FK MATERIALS(ID) - индекс продукта, необходимый для изготовления данного QTY INTEGER - кол-во продукта, необходимое для изготовления данного Можно ли сделать такой запрос, чтобы получить данные из всех 6 таблиц сразу? Я пробовал использовать join(select t4.res, t4.qty from t4_info t4 join t3_info t3 on t4.res = t3.out join t1_info t1 on t1.out=t4.res where t4.out=78;) получаю 1 запись с полями null. Да, Использую firebird 3 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 09:24 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is, union all select ... union all select ... union all select ... join тут не канает вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 09:25 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
я вообще не понял чего хочет автор ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 09:26 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
kdvmy_nik_name_is, union all select ... union all select ... union all select ... join тут не канает вообще. Я, видимо, не совсем правильно выразил проблему. Попробовал union all и получил все записи из всех таблиц. Мне нужны записи только по определенному критерию: в таблице "т4" есть запись: OUT-76 RES-66 QTY-6[/li] Поое RES ссылается на таблицу t3_info(out). В ней поле res ссылается на таблицу t2_info(out) b т.д. Мне надо написать запрос, который будет сводить цепочку данных из всех справочных таблиц в одну. В запросе с join в конце же есть указание: "where t4.out=78". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 09:54 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is, переделай структуру так чтобы у тебя вместо 6 таблиц была одна, и пользуйся рекурсивным запросом, будет тебе цепочка. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 09:58 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_isМне надо написать запрос, который будет сводить цепочку данных из всех справочных таблиц в одну. из таблиц "с одинаковой структурой" данные можно объединить только через union all. join можно было бы делать если бы справочная таблица была ОДНА. my_nik_name_isМне нужны записи только по определенному критерию: в таблице "т4" есть запись тогда join надо делать с одной таблицей Т4, и я не понял, зачем вам получать данные из 6 таблиц сразу. В общем, либо union all, либо никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 10:02 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Симонов Денис, Друг, вот честно, если бы я все это знал, то и не спрашивал бы здесь помощи. Подскажи, плиз, как мне переделать структуру? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 10:02 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
kdvmy_nik_name_isМне надо написать запрос, который будет сводить цепочку данных из всех справочных таблиц в одну. из таблиц "с одинаковой структурой" данные можно объединить только через union all. join можно было бы делать если бы справочная таблица была ОДНА. my_nik_name_isМне нужны записи только по определенному критерию: в таблице "т4" есть запись тогда join надо делать с одной таблицей Т4, и я не понял, зачем вам получать данные из 6 таблиц сразу. В общем, либо union all, либо никак. В производстве учавствуют продукты разных тех. категорий. Для каждой тех. категории я сделал справочную таблицу (уже понимаю, что неправ, только не понимаю в чем). Как можно пользоваться ОДНОЙ справочной таблицей не знаю. Я не волшебник, я только учусь (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 10:07 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is, да чего тут не понятного. раз в таблицах хранятся одинаковые по смыслу данные, да ещё и у них структура одинаковая значит это одна таблица. А запрос в этом случае превращается в такой Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
для завтраки, дальше сам ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 10:19 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is, категории можно разделить дополнительным полем, которое ссылается на справочник категорий ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 10:20 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Симонов Денисmy_nik_name_is, да чего тут не понятного. раз в таблицах хранятся одинаковые по смыслу данные, да ещё и у них структура одинаковая значит это одна таблица. А запрос в этом случае превращается в такой Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
для завтраки, дальше сам О как! Не буду врать, что все сразу понял. Но примерно уяснил, как все справочные таблицы можно свести в одну (думал об этом, когда проектировал БД, но счел лучшим вариантом: своя таблица для каждой тех. категории). Спасибо! Голова моя, после 2-го инсульта, соображает очень медленно и плохо, да и sql для меня внове. Буду дальше пытаться с одной справочной таблицей(это же все данные уже внесенные надо заново вноситьв новую таблицу! ужас!) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 10:31 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Симонов Денисmy_nik_name_is, категории можно разделить дополнительным полем, которое ссылается на справочник категорий В твоем примере это поле "consist_id" , правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 10:38 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is, ну наверное. Смысл такой. Каждый материал состоит из других материалов. Тебе лучше знать, я не владею знаниями о вашем бизнес-процессе. Только подкинул идею, не более того. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 10:50 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is<...> Буду дальше пытаться с одной справочной таблицей(это же все данные уже внесенные надо заново вноситьв новую таблицу! ужас!) Этого ужаса тоже можно избежать, перенеся данные из одной таблицы в другую соответствующим запросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2018, 12:24 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Приветствую, друзья! Vlad F, Спасибо за совет,в итоге я до этого додумался тоже. Ок. Я совместил данные из 6-ти справочных таблиц в одну: почитал про recursive и попробовал написать рекурсивный запрос: Код: sql 1. 2. 3.
При выполнении запроса получаю ошибку: "SQL error code = -206. Column unknown. T4.RES." Почему? Когда в IBExpert пишу запрос, то после t4. срабатывает подстановка и появляется список доступных полей и в нем поле res есть, и в первом запросе работает "t4.out=78", а при выполнении запроса после union поле неизвестно... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 12:56 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_isПочему? Потому что в этом select в части from отсутствует t4. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 13:02 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПотому что в этом select в части from отсутствует t4. Ясно. А можно как-то указать, что мне нужны записи, удовлетворяющие условиям из предыдущего запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 13:10 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is, надо было к алиасу CTE, а именно r, обращаться в рекурсии вместо t4 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 13:22 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Симонов Денис, Код: sql 1. 2. 3. 4.
Менял t3 на r - результат нулевой: на алиас "r" также ругается, что неизвестный. Что-то я не так понимаю, похоже. Либо вообще не понимаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 13:34 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is, потому что ты не внимательно смотрел мой пример. Там join алиаса CTE с таблицей во второй части union all ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2018, 16:02 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Симонов Денис, Попытался адаптировать твой пример к своей БД: Код: sql 1. 2. 3. 4.
В результате получаю 3 строки где "out = 78", т.е даже намека на "union all" нет Допустим, у нас есть такая таблица materials, в которой хранятся названия всех ресурсов: ID INTEGER NOT NULL PK, NAME VARCHAR(20), TIER INTEGER - тех. категория ресурса Также есть справочная таблица schema_info, в которой хранятся записи, какой ресурс для чего используется: ID INTEGER NOT NULL PK, OUT INTEGER, - ид готового ресурса RES INTEGER, - ид ресурса, нужного для изготовления нового ресурса примерно так у меня выглядят эти таблицы. Попытка адаптировать твой пример оказалась неудачной. В чем моя ошибка? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2018, 21:30 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
my_nik_name_is, ну запрос то надо нормально форматировать, чтобы читать было проще. 1. Сходу косяка в логике не видно, чтобы было видно надо бы ещё и res выводить, тогда будет видно что к чему присоединяется 2. level ты считаешь не верно. надо было r.lvl + 1 as lvl ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2018, 21:41 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Симонов Денис, а всё теперь вижу. Надо было вот так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2018, 21:45 |
|
Свести запросы из нескольких таблиц в одну
|
|||
---|---|---|---|
#18+
Симонов Денис, Где-то кроется ошибка. 1025 записей получаю в результате. И записей, где out=78, должно быть 3, мне кажется, а она всего одна [img=] ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2018, 06:43 |
|
|
start [/forum/topic.php?fid=40&fpage=29&tid=1560928]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 317ms |
total: | 479ms |
0 / 0 |