SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 02.05.2011 12:50:37

int64
Участник
Зарегистрирован: 02.08.2010
Сообщений: 7

Исключающий запрос

Прошу помощи.
Ситуация такая...

Необходимо из выборки:

Поле1       Поле2
знач1_1    знач2_1
знач1_2    знач2_2
знач1_3    знач2_3
и т.д.

исключить записи, где значение из Поля1 (знач1_x) встречается хотя бы раз в Поле2 (знач2_x).
Например, полученная выборка:

Поле1    Поле2
5           0
243        5
300        21

должна выглядеть так:

Поле1    Поле2
243        5
300        21

пробовал having'ом ( having Поле2 <> Поле1 ) - не получилось

Неактивен

 

#2 02.05.2011 13:57:09

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Исключающий запрос

select * from t_4201 where f1 not in( select distinct f2 from t_4201);

Оно?

Отредактированно deadka (02.05.2011 13:57:22)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 02.05.2011 14:05:26

int64
Участник
Зарегистрирован: 02.08.2010
Сообщений: 7

Re: Исключающий запрос

Не совсем... то, что я написал выше это уже есть выборка, причем используется достаточно большой запрос, необходимо к запросу "что-то" дописать чтобы учесть это условие. а вот что?

Неактивен

 

#4 02.05.2011 14:10:00

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Исключающий запрос

Может приведете сами таблицы и данные и текст Вашей выборки?

К слову, можно создать view, и к нему уже применять тот запрос, который я указал постом выше, эффект будет тот же самый.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 02.05.2011 14:40:00

int64
Участник
Зарегистрирован: 02.08.2010
Сообщений: 7

Re: Исключающий запрос

В общем опишу задачу подробнее.
Есть таблица банков `bank` и таблица РКО (Расчетно-кассовое обслуживание) `rko`.
В таблице банков содержится информация о банках включая город, где этот банк находится (city_id), и его значимость(головной офис или филиал) (parent).parent = 0 - если банк является гол. офисом. Если банка является филиалом, то это поле содержит id банка чей филиал.
в таблице РКО находится информация о РКО каждого банка. Т.е. по-идее, связь один-к-одному. Но есть один момент, для банков-гол.оф. (parent=0) есть еще одна запись в таблице РКО для домашнего региона. Т.е. филиалы содержат только одну запись РКО, а гол.оф. - 2 (для своего региона (city_id) и на всю Россию).

Вот здесь начинается экшн. Надо выбрать из РКО записи для банков из текущего города($CITY), которые являются филиалами, а если записи нет для банка-филиала, то ищем РКО банка-гол.оф. для всей России (если гол.оф. находится не в текущем городе($CITY)), либо РКО банка-гол.оф. домашнего региона (если city_id банка-гол.оф. == $CITY)


Таблицы:

bank (bank_id, name, parent и др.неважная инф.)
rko (rko_id, bank_id, home и др.неважная инф.)
home - указывает для какого региона. (1 - для домашнего, там где находится банк, 0 - для остальной части России)


Сам запрос:

"select `R`.*,`B`.`name`,`B`.`parent` from `rko` as `R`,`bank` as `B` where
`R`.`bank_id` = `B`.`bank_id` and
(
    (
        `B`.`city_id` = '$CITY' and `B`.`parent` != '0'
    )
    or
    (
        `B`.`parent` = '0' and
        (
            (`B`.`city_id` = '$CITY' and `R`.`home` = '1') or (`R`.`home` = '0')
        )
    )
)

Уточню проблему, весь запрос работает на "ура", только мне НЕ надо вытаскивать записи об РКО банков-гол.офисов, если есть хотя бы одна запись РКО его филиалов.

Отредактированно int64 (02.05.2011 14:48:01)

Неактивен

 

#6 02.05.2011 15:24:50

int64
Участник
Зарегистрирован: 02.08.2010
Сообщений: 7

Re: Исключающий запрос

Собственно получается такая выборка:

rko_id    bank_id    home    name                                        parent    city_id
1          5             0         Альфа-Банк                                0           3
2        477         0         Восточный Экспресс Банк            0           1
3        20           0         Юниаструм Банк                        0            1
4        243         1         Альфа-Банк                               5           3

здесь не должно быть 1 строки, т.к. в parent 4 строки = bank_id 1 строки

Неактивен

 

#7 04.05.2011 00:54:02

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Исключающий запрос

А почему не добавить WHERE bank_id NOT IN (SELECT parent FROM ... WHERE city_id = $CITY and parent != 0)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson