powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объединение таблиц
12 сообщений из 37, страница 2 из 2
Объединение таблиц
    #32660050
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛентяйХорошо, у меня есть приходная накладная на 100 рублей. Я продал одну бутылку водки. Это законная продажа?
Если приходная накладная на водку — продажа законная.
Если на пиво — НЕ законная. (Бадяжная твоя водка без приходной накладной. Рояль в гараже разливаешь.)
Отсюда проблема этой темы. Приход на пиво, расход — дырка. Приход — дырка, расход — водка. Мим предложил FULL JOIN — больше никак. Для начала советую не ЛЕНИТЬСЯ и изучить УК — соучастником пойдёшь. Либо править мозги бухгалтеру, затем структуру базы.
...
Рейтинг: 0 / 0
Объединение таблиц
    #32660069
Dr_Mike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну развели тут флейма!!!
"ova" спросить нормально не умеет, а народ ответить без стёба не может :-))

Итак, спецурок для "ova": "Как правильно задавать и оформлять вопрос" -
Подскажите пожалуйста, как мне составить запрос для получения данных из двух таблиц путем объединения их по значению одного поля, причем известно, что в обеих таблицах записей с определенным значением этого поля может быть несколько, или не быть вообще.
Хотелось бы получить что-либо подобное:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
+----------------+-----------------+-----------------+----------------+ ... -----------------+-----------------+
| Таблица1Поле1  |  Таблица1Поле2  |  Таблица2Поле1  |  Таблица2Поле2 |       Таблица1Поле3  |  Таблица2Поле3  |
+----------------+-----------------+-----------------+----------------+ ... -----------------+-----------------+
|       15       |      236        |       4         |       300      |         Период1      |     Период1     |
+----------------+-----------------+-----------------+----------------+ ... -----------------+-----------------+
|                |                 |       5         |       562      |                      |     Период1     |
+----------------+-----------------+-----------------+----------------+ ... -----------------+-----------------+
|       16       |     4050        |       6         |      1240      |         Период2      |     Период2     |
+----------------+-----------------+-----------------+----------------+ ... -----------------+-----------------+
|       17       |      340        |                 |                |         Период2      |                 |
+----------------+-----------------+-----------------+----------------+ ... -----------------+-----------------+
|       18       |      850        |                 |                |         Период3      |                 |
+----------------+-----------------+-----------------+----------------+ ... -----------------+-----------------+
|                |                 |       7         |       170      |                      |     Период4     |
+----------------+-----------------+-----------------+----------------+ ... -----------------+-----------------+
Где в правой части оборажены поля, на основе которых производится объединение таблиц.

И вообще, FAQ для кого написан???
...
Рейтинг: 0 / 0
Объединение таблиц
    #32660582
Фотография alex777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообщето описаная ситуация т.е. приход дырка расход водка или наоборот не является преступлением, это может являться лишь нарушением положения о бухгалтерском учете ито не всегда поясняю:
есть 2 вида учета количественный и суммовой
такое ощущение что база проектировалась именно под суммовой учет при котором не учитывается количество товаров а лишь учитывается их сумма например если на кухню было оптущено продуктов на 1000 руб то на 1000 кухня должна выдать продукции.
При количественном учете если на кухню было отдано продуктов на 10 тарелок супа исходя из норм закладки то 10 тарелок кухня и должна выдать.

Бухгалтера больше "любят" суммовой учет т.к. например никто не мешает унести домой тигровые креветки а вместо них притащить гнилой картошки которую потом списать.

зы
структуру базы надо пересматривать

Alex_M
...
Рейтинг: 0 / 0
Объединение таблиц
    #32660655
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Dr_Mike.

Может, конечно и прав, но мне мой вопрос кажется такой же понятный как и Ваш, хотя суть вопроса Вы несколько увели в сторону, тока моя таблица "плохо" форматирована, а принцип тот же.

To All.
Если ответите на хорошо форматированный и правильно поставленный вопрос Dr_Mike - я буду только счастлив
...
Рейтинг: 0 / 0
Объединение таблиц
    #32660851
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dr_MikeНу развели тут флейма!!!
"ova" спросить нормально не умеет, а народ ответить без стёба не может :-))

Итак, спецурок для "ova": "Как правильно задавать и оформлять вопрос" -
Подскажите пожалуйста, как мне составить запрос для получения данных из двух таблиц путем объединения их по значению одного поля...Насколько я понял, нету там поля, по которому нужно объединять. Сформировал таки автор коротко и ясно, что ему надо:Две практически независимые таблицы, как если бы нарисовать на отдельных листах бумаги две таблицы, а потом положить рядом. Я предложил аж два решения:
1 послать нафиг бухгалтера (то есть выяснить у него, нужно ли это вообще, а в процессе выяснения прийти к выводу что не нужно...)
2 "положить" два отчета рядом на один лист, и пущай бухгалтер радуется...

Ну а уж если хочется непременно на сервере этим извратом заняться, то вот так можно:
Пусть имеются две таблички
Код: plaintext
CREATE TABLE T1 (\n    Id   INTEGER, // Primary key\n    Fld1 ...,\n    ...\n    FldN ...\n);\nCREATE TABLE T2 (\n    Id   INTEGER, // Primary key\n    Fld1 ...,\n    ...\n    FldN ...\n);\n
Тогда запрос должен вот так выглядеть
Код: plaintext
Select t1.Id, t1.Fld1,... t1.FldN, \n       t2.Id, t2.Fld1,... t2.FldN\nFrom t1 t_1\nFull outer join t2  t_2 on\n  (Select Count(*) From t1 Where Id <= t_1.Id) =\n  (Select Count(*) From t2 Where Id <= t_2.Id)\n
...
Рейтинг: 0 / 0
Объединение таблиц
    #32661150
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕсколько извращенный вариант, так сразу и не скажешь чего получится, но буду пробовать, а суть поняли верно, спасибо.
...
Рейтинг: 0 / 0
Объединение таблиц
    #32661162
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ведь работает, абалдеть!!!!
...
Рейтинг: 0 / 0
Объединение таблиц
    #32661186
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ovaНЕсколько извращенный вариант...Задача извратная потому что!
...
Рейтинг: 0 / 0
Объединение таблиц
    #32661203
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ovaА ведь работает, абалдеть!!!!А теперь разберисъ как это работает :)
Если интересно могу пояснить, через полчасика...
...
Рейтинг: 0 / 0
Объединение таблиц
    #32663951
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛентяйЕсли интересно могу пояснить, через полчасика...
А что пол-часика еще не прошло? ;-)
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
Объединение таблиц
    #32664106
Лентяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Uskov ЛентяйЕсли интересно могу пояснить, через полчасика...
А что пол-часика еще не прошло? ;-)
------------------------
С уважением, Denis Uskov
У черт, часы остановились... :)

Ну ладно, задача состоит в том, чтобы в запросе объединить две таблицы, не имеющие полей, подходящих для объединения. Решение - если таких полей нет, попробуем их создать во время выполнения запроса. Попробуем пронумеровать строки таблиц от единицы до количества записей. При наличии в таблице уникального поля или комбинации полей (далее PK) номером строки можно сделать количество записей с PK, меньшим или равным PK очередной записи. Попробуем такой запрос :
Код: plaintext
1.
2.
Select (Count(*) from SomeTable where PK <= T.PK) as RNum, T.* 
From SomeTabe T
Получили, то что и хотели. Стоит, правда, обратить внимание на статистику выполнения запроса. Там увидим большое количество чтений. Вообщем-то ничего удивительного. Ведь приходится для каждой очередной строки выполнить подзапрос с count. Но тем не менее цель достигнута. Теперь это виртуальное поле можно использовать для объединения двух таблиц:
Код: plaintext
1.
2.
3.
4.
5.
6.
Select t1.Id, t1.Fld1,... t1.FldN, 
       t2.Id, t2.Fld1,... t2.FldN
From t1 t_1
Full outer join t2  t_2 on
  (Select Count(*) From t1 Where Id <= t_1.Id) = // Вот это первое "виртуальное" поле
  (Select Count(*) From t2 Where Id <= t_2.Id)   // А это второе
Понятно, что Join можно использовать любой, получая при этом различные варианты объединения таблиц. Если в базе имеются парочка свободных генераторов, которые гарантированно никто другой во время исполнения запросов не "дернет" то вместо count можно использовать их. Тогда скорость выполнения запроса значительно увеличиться.
...
Рейтинг: 0 / 0
Объединение таблиц
    #32665995
ova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, я так и понял, спасибо большое. НАверное все же придется использовать генераторы.
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Объединение таблиц
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]