Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите как поиском отсутствующих данных 
V
    Опции темы
maxipub
  Дата 16.7.2014, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Добрый день!

Есть таблица A с id, нужно выбрать данные из таблицы B, для которых нет id=val (но которые есть в A). Как делаем:

Код
SELECT ... FROM A LEFT JOIN B ON B.id=A.id WHERE A.id=val AND B.id IS NULL


Задача у нас чуть сложнее.

Есть таблицы TABLE_1, TABLE_2.1 и TABLE_2.2, нужно выбрать данные из TABLE_3, для которых нет записи id=val, существующей в TABLE_1 ИЛИ в TABLE_2.1 - но для последней только для случае, когда id=val ЕСТЬ и в TABLE_2.2

т.е. условие вида

ВЫБРАТЬ данные из таблицы TABLE_3 ПРИ УСЛОВИИ, что id=val есть в TABLE_1 ИЛИ в (TABLE_2.1 И TABLE_2.2), но нет в TABLE_3

Такое можно сделать одним запросом?

Пока склоняюсь к мысли разбить его на два запроса (отдельно TABLE_1, отдельно TABLE_2.1 И TABLE_2.2), и далее результаты уже объединить посредствам php. 

Заранее спасибо за помощь! smile 
PM MAIL   Вверх
Akina
Дата 17.7.2014, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Нужно что-то типа
Код

select *
from table3
where id in (   
    select val 
    from table1
  union all
    select table21.val 
    from table21, table22 
    where table21.val=table22.val
)

Цитата(maxipub @  16.7.2014,  12:18 Найти цитируемый пост)
склоняюсь к мысли разбить его на два запроса (отдельно TABLE_1, отдельно TABLE_2.1 И TABLE_2.2), и далее результаты уже объединить посредствам php. 

Незнание - не повод делать через задницу.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 18.7.2014, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, спасибо, попробуем так.

Цитата(Akina @  17.7.2014,  11:56 Найти цитируемый пост)
Незнание - не повод делать через задницу. 

Ну так я и спрашиваю.
PM MAIL   Вверх
maxipub
Дата 18.7.2014, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Блин, сорри, я ерунду написал.

Все то же самое, только данные выбираются из TABLE_1 / TABLE_2.1, id которых нет в TABLE_3!

Пока сделал все же раздельными запросами, т.к. это логично и быстро. Не совсем пойму такой выпад в сторону это. Часто разделяют большие запросы на 2-3-4 даже. Тем более решение с IN при неизвестном количестве данных - очень спорный вариант, ИМХО.
PM MAIL   Вверх
Akina
Дата 18.7.2014, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  18.7.2014,  09:51 Найти цитируемый пост)
Все то же самое, только данные выбираются из TABLE_1 / TABLE_2.1, id которых нет в TABLE_3!

Не понял фразы.

Цитата(maxipub @  18.7.2014,  09:51 Найти цитируемый пост)
Часто разделяют большие запросы на 2-3-4 даже. 

В 90% случаев так делают те, кто ни ухо ни рыло в запросах. Сделать фигню, а потом придумать, почему так лучше, да ещё гордиться этим... не иди таким путём.
Да, бывают ситуации, когда так на самом деле правильно. Но они редки, и это почти наверняка не твой случай.

Цитата(maxipub @  18.7.2014,  09:51 Найти цитируемый пост)
логично и быстро. Не совсем пойму такой выпад в сторону это

Ну тогда сделай следующий логический шаг, и вообще откажись от сервера БД...



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 18.7.2014, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(Akina @  18.7.2014,  10:09 Найти цитируемый пост)
Не понял фразы.

Я писал:

Цитата(maxipub @  16.7.2014,  11:18 Найти цитируемый пост)
Есть таблицы TABLE_1, TABLE_2.1 и TABLE_2.2, нужно выбрать данные из TABLE_3, для которых нет записи id=val, существующей в TABLE_1 ИЛИ в TABLE_2.1 - но для последней только для случае, когда id=val ЕСТЬ и в TABLE_2.2


А на самом деле надо так:

Есть таблицы TABLE_1, TABLE_2.1 и TABLE_2.2, TABLE_3. Нужно выбрать данные из TABLE_1, TABLE_2.1 (сами данные могут пересекатся, выборка должна быть с группировкой по id, дубли не нужны), у выбираемых данных должен быть id, которого нет в TABLE_3. При этом, из TABLE_2.1 берем только те записи, для которых id есть и в TABLE_2.2.
PM MAIL   Вверх
Akina
Дата 21.7.2014, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  18.7.2014,  13:04 Найти цитируемый пост)
на самом деле надо так:

Я лично ничего не понимаю в твоём описании...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 22.7.2014, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Выбрать записи, id которых нет в TABLE_3, но есть в TABLE_1 и/или в ( TABLE_2.1 и TABLE_2.2 ).
PM MAIL   Вверх
Akina
Дата 22.7.2014, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Ааа... вот так, что ли?

Код

select q.val
from 
(   
    select val 
    from table1
  union 
    select table21.val 
    from table21, table22 
    where table21.val=table22.val
) q
left join table3 on q.val=table3.id
where table3.id is null



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 24.7.2014, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, спасибо всен оказалось не так сложно, вы были правы. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0594 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.