powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проверка наличия в таблице набора записей
5 сообщений из 5, страница 1 из 1
Проверка наличия в таблице набора записей
    #39720169
barrrssss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеются таблицы table1 и table2(временная). Как создать запрос, который бы подтверждал или опровергал наличие в полях nom_id и s_id из table1 такого же набора записей из table2, но соответствующих одному значению ns_id.
В данном случае запрос бы подтверждал наличие благодаря записям 3,4,5. Записи 1,2,6 относятся к разным ns_id и запрос должен их игнорировать.
...
Рейтинг: 0 / 0
Проверка наличия в таблице набора записей
    #39720309
barrrssss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге решить такую задачу с помощью запроса мне так и не удалось(
Пришлось создавать процедуру и цикл, который сравнивает каждый набор записей nom_id и s_id для единственного значения ns_id в первой таблице с записями nom_id и s_id во второй таблице.
...
Рейтинг: 0 / 0
Проверка наличия в таблице набора записей
    #39720347
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На уровне идеи.
Сделать конкатенацию полей nom_id и s_id из всех предварительно отсортированных записей для каждого ns_id через какой-то разделитель и сохранить это значение (если надо, то вместе с ns_id) в отдельной таблице.
В принципе, по такой таблице в один запрос можно получить результат
...
Рейтинг: 0 / 0
Проверка наличия в таблице набора записей
    #39720674
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задание плохо определено... но если предположить, что table2 - это фильтр с неопределённым количеством записей, то
Код: sql
1.
2.
3.
4.
5.
SELECT t1.ns_id
FROM table1 t1
JOIN  table2 t2 ON t1.nom_id = t2.nom_id AND t1.s_id = t2.s_id
GROUP BY t1.ns_id
HAVING COUNT(DISTINCT t1.nom_id, t2.s_id) = (SELECT COUNT(*) FROM table2)


В зависимости от существующих условий и ограничений запрос, возможно, удастся ещё упростить (хотя он и так несложный).
...
Рейтинг: 0 / 0
Проверка наличия в таблице набора записей
    #39723854
barrrssss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо за подсказку, но немножко не то... Мне нужно, чтобы если для одного ns_id кроме набора записей из table2 существовала лишняя запись, то запрос такой ns_id также игнорировал, тогда вAkina
Код: sql
1.
2.
3.
4.
5.
SELECT t1.ns_id
FROM table1 t1
JOIN  table2 t2 ON t1.nom_id = t2.nom_id AND t1.s_id = t2.s_id
GROUP BY t1.ns_id
HAVING COUNT(DISTINCT t1.nom_id, t2.s_id) = (SELECT COUNT(*) FROM table2)


вместо JOIN я использую заменитель FULL JOIN (которого в mysql нет). И да, table2 - это фильтр с неопределённым количеством записей, надо было уточнить.
Вот запрос, выполняющий все условия:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT s1.ns_id FROM (
SELECT t1.ns_id, t1.nom_id, t1.s_id
FROM table1 t1
  RIGHT JOIN  table2 t2 ON t1.nom_id = t2.nom_id AND t1.s_id = t2.s_id
UNION
SELECT t1.ns_id, t1.nom_id, t1.s_id
FROM table1 t1
  LEFT JOIN  table2 t2 ON t1.nom_id = t2.nom_id AND t1.s_id = t2.s_id) s1
GROUP BY s1.ns_id
HAVING COUNT(*) = (SELECT COUNT(*) FROM table2);
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проверка наличия в таблице набора записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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