powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / inner join пересечение данных
25 сообщений из 26, страница 1 из 2
inner join пересечение данных
    #39917693
_s_e_r_g_e_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, возник теоретический вопрос.

Есть таблица1

kod
1
1
2
3

и таблица2
kod
1
1
2
5
6

в запросе пишем следующее:

Код: vbnet
1.
2.
SELECT Таблица1.id, Таблица2.id
FROM Таблица3 INNER JOIN Таблица4 ON Таблица1.id = Таблица2.id;



и на выходе получаем следующее:

Таблица2.id Таблица1.id
1 1
1 1
1 1
1 1
2 2

Вопрос в следующем. Можно ли каким либо образом без использования группировки сделать так чтобы выводилось именно пересечение, т.е. на выходе должны получить:
Таблица2.id Таблица1.id
1 1
1 1
2 2
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39917757
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выводится именно пересечение. Ибо в этих таблицах отсутствует возможность идентифицировать записи.

Можно в подзапросе нумеровать дубликаты, и при связывании требовать равенства не только кода, но и номера по порядку.
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926566
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_s_e_r_g_e_
Добрый день, возник теоретический вопрос.
...
Вопрос в следующем. Можно ли каким либо образом без использования группировки сделать так чтобы выводилось именно пересечение, т.е. на выходе должны получить:
Таблица2.id Таблица1.id
1 1
1 1
2 2


Может так?
Код: vbnet
1.
2.
3.
SELECT Таблица2.id, Таблица1.id
FROM Таблица2 INNER JOIN Таблица1 ON Таблица1.id = Таблица2.id
ORDER By Таблица2.id ASC;


Или я что-то "недогоняю"???
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926701
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
Или я что-то "недогоняю"???
Просто воссоздай таблички (они ж маленькие) и выполни свой запрос...
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926735
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
drafty
Или я что-то "недогоняю"???
Просто воссоздай таблички (они ж маленькие) и выполни свой запрос...

...зафига?
В результате
Код: vbnet
1.
2.
3.
SELECT Таблица2.id, Таблица1.id
FROM Таблица2 INNER JOIN Таблица1 ON Таблица1.id = Таблица2.id
ORDER By Таблица2.id ASC;


должно получиться искомое (логика выполнения запроса прилагается в иллюстрации)
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926825
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_s_e_r_g_e_,
а что должно остаться в следующем случае
Таблица2 Таблица11 11 11 43 22 2
какая единичка или двойка должны остаться
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926828
ИВП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА,
наверное, две единицы из правой таблицы (с такими же единицами из левой таблицы) и одна двойка из левой таблицы (с такой же двойкой из правой таблицы)
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926829
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
...зафига?
для надо
drafty
должно получиться искомое
лично вам?
Коллега вам сказал, воссоздайте и удивитесь.
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926919
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогер_самоучка
drafty
...зафига?
для надо
drafty
должно получиться искомое
лично вам?
Коллега вам сказал, воссоздайте и удивитесь.

...вы меня заинтриговали.В поннедел обязательно проэкспериментирую...
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926923
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_s_e_r_g_e_

Есть таблица1
kod
1
1
2
3
и таблица2
kod
1
1
2
5
6
Может я чё не понимаю:а что кодовые поля в обоих таблицах не уникальны??
Хотя в первой таблице оно должно быть уникальным а во второй полем связи со стороны многие (не уникальное)
Я так думаю! (Мимино)
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39926926
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
должно получиться искомое (логика выполнения запроса прилагается в иллюстрации)
Кривая логика порождает кривые ответы. Прочитай ещё раз самый первый пост-вопрос. Сравни запрос автора и твой (если, конечно, исправить ошибки в запросе автора и убрать не влияющую на результат сортировку из твоего - близнецы-братья). Посмотри, какой результат даёт такой запрос (я понимаю, что уверенность - достаточное основание игнорировать совет провести натурный эксперимент, но не надо путать уверенность с самоуверенностью, особенно необоснованной), сравни со своими ожиданиями. И иди, читай ещё раз про фантомные умножения при джойнах по неуникальным полям.

sdku
Может я чё не понимаю:а что кодовые поля в обоих таблицах не уникальны??
А где написано, что "код" обязан быть уникальным?
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927099
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
....А где написано, что "код" обязан быть уникальным?
А как идентифицировать записи?
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927194
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
А как идентифицировать записи?
Да какая разница? что ж вы все стремитесь додумать за автора, и ответить не на его вопрос, а на тот, который вы ему придумаете взамен заданного? Вот никак - просто представь на секунду, что их НЕ НАДО идентифицировать. Или, в терминах заданного вопроса - имеется неуказанное и нафиг не нужное В ЭТОЙ ЗАДАЧЕ поле, которое однозначно идентифицирует запись, опять же за рамками ЭТОЙ задачи.
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927265
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прогер_самоучка
drafty
...зафига?
для надо
drafty
должно получиться искомое
лично вам?
Коллега вам сказал, воссоздайте и удивитесь.

Только что воссоздал,и получилось следующее:
11
11
11
22
две записи с единицами оказались лишними...
А по сему,по совету коллеги Akina в 22080378 - иду читать ещё раз про фантомные умножения при джойнах по неуникальным полям...
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927269
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
Прогер_самоучка
пропущено...
для надо
пропущено...
лично вам?
Коллега вам сказал, воссоздайте и удивитесь.

Только что воссоздал,и получилось следующее:
11
11
11
22
две записи с единицами оказались лишними...
А по сему,по совету коллеги Akina в 22080378 - иду читать ещё раз про фантомные умножения при джойнах по неуникальным полям...

т.е. получилось:
11
11
11
11
22
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927309
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_s_e_r_g_e_,

Код: sql
1.
2.
3.
4.
5.
select kod1, kod2
from (
    select kod as kod1, (select kod from таблица2 as t2 where t2.kod = t1.kod) as kod2
    from таблица1 t1) as t
where t.kod2 is not null
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927321
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry , а откуда Вы намерены получить NULL, если ни одно значение не NULL, и ни одного LEFT JOIN?
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927336
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Если в таблица2 нет значений кода из таблица1
(select kod from таблица2 as t2 where t2.kod = t1.kod)
вернет null
Нет?
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927346
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо уточнить:

Код: sql
1.
2.
3.
4.
5.
select kod1, kod2
from (
    select kod as kod1, (select top 1 kod from таблица2 as t2 where t2.kod = t1.kod) as kod2
    from таблица1 t1) as t
where t.kod2 is not null



иначе может быть ошибка...
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927347
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо уточнить:

Код: sql
1.
2.
3.
4.
5.
select kod1, kod2
from (
    select kod as kod1, (select top 1 kod from таблица2 as t2 where t2.kod = t1.kod) as kod2
    from таблица1 t1) as t
where t.kod2 is not null



иначе может быть ошибка...
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927362
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rivkin Dmitry
Если в таблица2 нет значений кода из таблица1
(select kod from таблица2 as t2 where t2.kod = t1.kod)
вернет null
Нет?
Ну в результате-то получится простейший INNER JOIN. Причём такой, которому чхать на количество равных значений - он их просто не различает.
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927364
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В любом случае для решения задачи необходимо нумеровать записи с равным kod - т.е. преобразовывать данные из
kod1123
в
kod num11122131
и соответственно для второй таблицы
kod num1112215161
И после этого уже связывать по t1.kod=t2.kod AND t1.num=t2.num .

Только так и можно получить требуемый результат.

Увы, но нумерация неуникальных записей в MS Access - это рожание ежа против шерсти. Ибо оконных фанкций тут нет от слова "совсем".
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927375
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Это не твой совет - попробовать?

Моя идея состоит в том, чтобы обойти куртезианское умножение в том случае, когда коды совпадают, поэтому, первая выборка делается из первой таблицы (можно таблицы поменять местами). Затем идет проверка в каждой строчке на наличие такого же кода во второй таблице. Если его не существует, результат из общего запроса отбрасывается. Это не тривиальный джоин...

Вот результат запроса:

kod1 kod21 11 12 2
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927397
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
sdku
А как идентифицировать записи?
Да какая разница? ....

Akina
...Увы, но нумерация неуникальных записей в MS Access - это рожание ежа против шерсти. Ибо оконных фанкций тут нет от слова "совсем".
Немного противоречиво,однако
...
Рейтинг: 0 / 0
inner join пересечение данных
    #39927538
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
Немного противоречиво,однако
Код: vbnet
1.
SELECT kod, ROW_NUMBER() OVER (PARTITION BY kod)

ничем и никак не противоречиво.
Rivkin Dmitry
Вот результат запроса
Проверь свой запрос, добавив в первую таблицу ещё одну запись с kod=1.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / inner join пересечение данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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