|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
Считаю количество галочек (поля bit) в 4 колонках 4 таблиц по следующему запросу: Код: sql 1. 2.
Возможно ли упростить получившееся выражение? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 14:51 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
ypmail, Ну, как-то так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
А вообще, это что за жуть? Что вычисляем, брат? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 15:00 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 15:21 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
Rivkin Dmitry, После WHERE ничего не сократить? Вообще задумка глобальная, пока разбил задачу на части и пытаюсь её решить мелкими кусочками Есть некая неисправность, виновником которой могут послужить работы и материалы, собственные и сторонние - соответственно 4 таблицы. Виновником может являться только одна позиция во всех этих 4-х таблицах. Если галка уже стоит на одной позиции, то при установке её на другую, уже установленная галка затирается и выводится сообщение об этом. Такую кадабру придётся прописывать во всех 4-х таблицах через программу. В программной оболочке есть форма задания условия на значение, пока пытаюсь компактно задать это условие, дальше ломать голову как сделать остальное. Сначала сделал так: Код: sql 1. 2. 3. 4.
Потом вот так: Код: sql 1. 2.
<LMainID> - это текущее значение, я его пока заменил конкретным, в программе записи отбираются по текущему. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 15:22 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
Не так, Боюсь, тут много вложенных запросов, не скажется на производительности? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 15:24 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
ypmail, Трудно понять задачу по невнятному куску оаисания: авторВообще задумка глобальная, пока разбил задачу на части и пытаюсь её решить мелкими кусочками Есть некая неисправность, виновником которой могут послужить работы и материалы, собственные и сторонние - соответственно 4 таблицы. Виновником может являться только одна позиция во всех этих 4-х таблицах. Если галка уже стоит на одной позиции, то при установке её на другую, уже установленная галка затирается и выводится сообщение об этом. Такую кадабру придётся прописывать во всех 4-х таблицах через программу. Но, если я понял правильно, подход к задаче неверный. Должно быть - таблица неисправностей (список пополняемый) И сводная таблица, допустим, с датой неисправности, кодом неисправности из талицы неисправностей и флагамиЖ сторонняя или собственная, работы или мптериалы. Тогда простым запросом с фильтром по датам можно вычислить количество неисправностей по группам: работы, материалы, сторонние, свои. И не надо ломать голову ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 16:22 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
Rivkin Dmitry, Попробую объяснить проще. Есть 4 таблицы с полями bit (значения 0 и -1, т.е. есть галочка или нет). Если в одной из таблиц эта галочка установлена, то в остальных (если она есть) должна удаляться. Дата ремонта у меня одна, ремонт один, но этот ремонт состоит из перечня собственных работ (несколько строк), сторонних (несколько строк), собственных материалов (несколько строк) и сторонних (те самые 4 таблицы). Виновником неисправности нужно обозначить только одну позицию (т.е. поставить галочку только в одной строке). Ставлю галку в одной строке любой из таблиц - во всех остальных строках и в остальных таблицах галки быть не должно, если есть - она удаляется. В первом посте я привел выражение, по которому считаю количество галок во всех 4-х таблицах с выборкой их из базы по текущему ремонту. 990 - это ID ремонта (то же, что Вы предлагаете с датой, я делаю по ID ремонта главной таблицы), оно же в ключевых полях всех 4-х таблиц. Пока вопрос стоит как упростить приведённое мной выражение, если в нём есть что упрощать. Дальше будем подумать как реализовывать остальное. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 20:40 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
ypmailСчитаю количество галочек (поля bit) в 4 колонках 4 таблиц по следующему запросу: Код: sql 1. 2.
Возможно ли упростить получившееся выражение?Ну, хотя бы убрать все LIKE "-1", так как во-первых, это эквивалентно равенству, но и это уже не важно, так как, во-вторых, это эквивалентно VLabour=True, VMaterial=True и т .д., что, в свою очередь, эквивалентно просто ... VLabour AND VMaterial AND .... Но нормальное решение дано здесь 18701835 . ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2016, 21:45 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
ypmailRivkin Dmitry, Попробую объяснить проще. Есть 4 таблицы с полями bit (значения 0 и -1, т.е. есть галочка или нет). Если в одной из таблиц эта галочка установлена, то в остальных (если она есть) должна удаляться. Дата ремонта у меня одна, ремонт один, но этот ремонт состоит из перечня собственных работ (несколько строк), сторонних (несколько строк), собственных материалов (несколько строк) и сторонних (те самые 4 таблицы). Виновником неисправности нужно обозначить только одну позицию (т.е. поставить галочку только в одной строке). Ставлю галку в одной строке любой из таблиц - во всех остальных строках и в остальных таблицах галки быть не должно, если есть - она удаляется. В первом посте я привел выражение, по которому считаю количество галок во всех 4-х таблицах с выборкой их из базы по текущему ремонту. 990 - это ID ремонта (то же, что Вы предлагаете с датой, я делаю по ID ремонта главной таблицы), оно же в ключевых полях всех 4-х таблиц. Пока вопрос стоит как упростить приведённое мной выражение, если в нём есть что упрощать. Дальше будем подумать как реализовывать остальное. Ну, неправильно это иметь 4 таблицы на 1 ремонт! В конце-концов, сделай в таблице ремонтов кроме даты и названия еще 4 поля с описаниями и поле "галки", но не логическое, а числовое от 0 до 3: 0 - собственные работы, 1 - сторонние и т.д... Понадобится еще тип, с легкостью добавишь. Хотя, и это неправильно. Я бы, после твоих уточнений, сделал бы справочник ремонтов (названий) - 1; Справочник неисправностей - все в кучу + флаг или тип (тип работ и тип материалов); Журнал ремонтов - дата и ID из справочника ремонтов + та самая "галка" - виновник; и последняя таблица - Деталировка ремонтов - ID из жуонала + ID из справочника неисправносетй (1 ко многим). Флаг этого ID совпадает с "галкой". Теперь считай что хочешь и как хочешь, хоть по журналу, хоть по деталировке А 4 таблицы на один ремонт - это точно денормализация базы данных и совершенно неоправданная ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 09:28 |
|
Упростить запрос с Count из нескольких полей нескольких таблиц
|
|||
---|---|---|---|
#18+
__MichelleНу, хотя бы убрать все LIKE "-1", так как во-первых, это эквивалентно равенству, но и это уже не важно, так как, во-вторых, это эквивалентно VLabour=True, VMaterial=True и т .д., что, в свою очередь, эквивалентно просто ... VLabour AND VMaterial AND .... Работает только VLabour=1. P.S.: Правда проверял на SQL, т.к. база у меня на SQL, а интерфейс программы использует синтаксис для Access, под программу буду адаптировать позже. Думаю, в базе access будут те же результаты. Но нормальное решение дано здесь 18701835 . Решение понравилось компактностью, в базе считает быстро, надеюсь в программе тормозить не будет несмотря на запросы select в скобках. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2016, 09:57 |
|
|
start [/forum/topic.php?fid=45&msg=39150721&tid=1614043]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 326ms |
total: | 464ms |
0 / 0 |