"Ключ" в UNION запросе

vixxa

С наступившим Новым Годом, многоуважаемые форумчане!Подскажите люди добрые, как сделать так, чтобы в union-запросе из 2-х (или более) таблиц при выборке создавалось уникальное числовое (ключ) поле.Если не досмотрел ФАК - снимаю шляпу для камней Заранее спасибо, и всех с наступающим Рождеством!!!
21 ответ

vixxa

Ваапще, каждый из кусков, который подшивается в общую простынь в юнионе, должен иметь числовой ПК. Все таблицы данных должны имтеть ПК автосчетчик. Это аксиома.Так вот. У каждого куска свой ПК есть. Но у разных кусков ПК могут повторяться. Если взять ПК каждого куска, умножить его на заведомо большое число и добавить номер куска в юнионе, то с большой вероятностью сформированный таким образом код будет уникальным.


vixxa

Программист-Любитель,Спасибо, как вариант принимается на УРА!Одно плохо, если бы заранее знал где падать, то бишь знать количество записей... :(Но все равно за совет спасибо, уникальные ключи конечно есть в моих таблицах.


vixxa

А сочетание из двух полей точно не годится?


vixxa

А сочетание из двух полей точно не годится?
Вы имеете ввиду объеденить их через &?Или как нибудь по другому?Мне, в принципе, все равно, выборка по запросу ложится с список, из списка, по ключу, пользователь выбирает данные в другую форму.Программист-Любитель дал дельный совет, уже реализовал, вроде нормально работает.Но
то с большой вероятностью сформированный таким образом код будет уникальным
немного напрягает, так как база растет быстро.


vixxa

Вы имеете ввиду объеденить их через &?
Нет. Оставить как два поля.


vixxa

Нет. Оставить как два поля.
Вопрос стоит в уникальности ключа для выбраных запросом данных для последующей связи через СurrentProject.Connection.Execute.Хотя, вполне вероятно, я не понял ход Ваших мыслей


vixxa

Я же не знаю, для чего это нужно. Поэтому и спросил, не годится ли такой вариант. Если не годится, значит не годится, Вам лучше знать.


vixxa

Владимир Саныч,Все равно, спасибо за участие !!!


vixxa

vixxa,а можно на - ты - маладецц!!!


vixxa

vixxa,а можно на - ты - маладецц!!!
спасибо за празхнник


vixxa

Для именно двух таблиц
select 2*pk pk, ... from table1
union
select 2*pk+1, ... from table2
Для N таблиц - множить на N и плюсовать 0,1,...,N-1.На случай переполнения предусмотреть использование более "широкого" типа данных явным CAST к такому типу в первом субзапросе.


vixxa

PS. тормозить будет как зараза...


vixxa

имхо, лучше всё-таки, как учит великй Саныч - два поля
select 1 as AUX, pk, ... from table1
union all -- желательно UNION ALL, а не просто UNION, - т.к. записи априори уникальны
select 2 as AUX, pk, ... from table2
union all
select 3 as AUX, pk, ... from table3
...


vixxa

имхо, лучше всё-таки, как учит великй Саныч - два поля
Саныч еще переспросил, годится ли это решение. Получил ответ, что не годится.


vixxa

...чёйта функцию из ФАКа никто "не советует" :)
SELECT MyFun(Digits.dig) as pk, Digits.dig FROM Digits
union all
SELECT MyFun(Digits.dig), Digits.dig FROM Digits
union all
SELECT MyFun(Digits.dig), Digits.dig FROM Digits

where MyFun(1,1)


vixxa

Еще б ТС открыл сакральную тайну - а за каким собсно хреном у него в базе развелись аналогичные/подобные таблицы, кои юнионить надо... Чо эта за бизнес-кейс такой...


vixxa

в А97-м "столкнулся" в юнионе "позволено" максимум - 11-ть тбл...фз - как счас...наканецта - 13724349


vixxa

vixxa,а можно на - ты - маладецц!!!
Правила хорошего тона еще никто не отменял, но если обращение на "ты" так критично - то прошу прощения за свою наВЫвязчивость )


vixxa

PS. тормозить будет как зараза...
ИМХО, будет тормозить


vixxa

...чёйта функцию из ФАКа никто "не советует" :)[src]SELECT MyFun(Digits.dig) as pk, Digits.dig FROM Digitsunion allSELECT MyFun(Digits.dig), Digits.dig FROM Digitsunion allSELECT MyFun(Digits.dig), Digits.dig FROM Digitswhere MyFun(1,1)
если не секрет, а где подсмотреть содержимое MyFun?


vixxa

если не секрет, а где подсмотреть содержимое MyFun?
вероятно здесьhttp://www.sql.ru/faq/faq_topic.aspx?fid=214ответ Q6