Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > НЕОБЫЧНАЯ выборка


Автор: savmp 2.2.2012, 22:42
ЕСТЬ ВЫБОРКА из базы данных.

но она работает не так как нужно

SELECT * FROM TABLE WHERE (GO_A = '001' OR GO_B = '002') AND (TARIF = 'VIP' OR TARIF = 'FREE')

ЧТО нужно написать в место AND (я так думаю, что в место AND, возможно и нет) чтобы смысл выборки был таков:

ВЫБЕРИ * все поля из таблицы ГДЕ (GO_A = '001' OR GO_B = '002') И ИМЕННО ТЕ В КОТОРЫХ ЕСТЬ (TARIF = 'VIP' OR TARIF = 'FREE')

Я уже голову сломал... думая как это можно реализовать.

СО словом AND получается, что вытаскиваются и те и те...
А нужно вытаскивать только (GO_A = '001' OR GO_B = '002') у которых есть (TARIF = 'VIP' OR TARIF = 'FREE')

Добавлено через 13 минут и 20 секунд
Я не знаю... но возможно ли сделать выборку в выборке? Или как-то так?

Типа двойной выборки... вторая выборка выбирает из результата первой...

ИЛИ как-то так.

Добавлено через 14 минут и 37 секунд
Смешная идея, но всё таки!))

Автор: Данкинг 2.2.2012, 23:18
Долго думал, так и не понял, чем не подходит написанный тобой запрос. Какие "и те, и те" выбираются?

Добавлено через 4 минуты и 37 секунд
Цитата(savmp @  2.2.2012,  23:42 Найти цитируемый пост)
но возможно ли сделать выборку в выборке?

Суть та же будет:
Код

SELECT * from test WHERE tarif in (SELECT tarif FROM test WHERE (TARIF = 'VIP' OR TARIF = 'FREE')) and (GO_A = '001' OR GO_B = '002') 

Автор: tzirechnoy 2.2.2012, 23:44
Написанный запрос должэн работать именно так, как Вы и описали.

Автор: savmp 2.2.2012, 23:53
Цитата(tzirechnoy @ 2.2.2012,  23:44)
Написанный запрос должэн работать именно так, как Вы и описали.

НЕТ!))

SELECT * FROM TABLE WHERE (GO_A = '001' OR GO_B = '002') AND (TARIF = 'VIP' OR TARIF = 'FREE')

ВОТ ЭТОТ ЗАПРОС РАБОТАЕТ НА ВСЕ 100%

НО он вытаскивает не то, что нужно...

В этом запросе вытаскиваются ВЫТАШИ (GO_A = '001' OR GO_B = '001') И (TARIF = 'VIP' OR TARIF = 'FREE')

А НУЖНО

(GO_A = '001' OR GO_B = '002') У КОТОРЫХ (TARIF = 'VIP' OR TARIF = 'FREE')


ТАБЛИЦА

ID     GO_A        GO_B     TARIF

1       001          001        VIP
2       001          004        ECONOM
3       003          002        VIP
4       003          001        FREE
5       002          002        VIP

Добавлено @ 23:59
Если к этой таблице:

ID     GO_A        GO_B     TARIF

1       001          001        VIP
2       001          004        ECONOM
3       003          002        VIP
4       003          001        FREE
5       002          002        VIP

ИСПОЛЬЗОВАТЬ МОЙ ЗАПРОС:

SELECT * FROM TABLE WHERE (GO_A = '001' OR GO_B = '001') AND (TARIF = 'VIP' OR TARIF = 'FREE')

ТО мы получим:
1       001          001        VIP
2       001          004        ECONOM
3       003          002        VIP
4       003          001        FREE
5       002          002        VIP


А НУЖНО ПОЛУЧИТЬ
1       001          001        VIP
4       003          001        FREE



Автор: Данкинг 3.2.2012, 00:09
Запрос:
Код

SELECT * FROM test WHERE (GO_A = '001' OR GO_B = '001') AND (TARIF = 'VIP' OR TARIF = 'FREE')

Результат:
user posted image

Автор: Akina 3.2.2012, 13:14
Цитата(savmp @  3.2.2012,  00:53 Найти цитируемый пост)
Если к этой таблице:

ID     GO_A        GO_B     TARIF

1       001          001        VIP
2       001          004        ECONOM
3       003          002        VIP
4       003          001        FREE
5       002          002        VIP

ИСПОЛЬЗОВАТЬ МОЙ ЗАПРОС:

SELECT * FROM TABLE WHERE (GO_A = '001' OR GO_B = '001') AND (TARIF = 'VIP' OR TARIF = 'FREE')

ТО мы получим:
1       001          001        VIP
2       001          004        ECONOM
3       003          002        VIP
4       003          001        FREE
5       002          002        VIP

 smile Быть не может... Назовите СУБД.

Добавлено через 1 минуту и 19 секунд
Цитата(savmp @  3.2.2012,  00:53 Найти цитируемый пост)
Если к этой таблице:

ID     GO_A        GO_B     TARIF

1       001          001        VIP
2       001          004        ECONOM
3       003          002        VIP
4       003          001        FREE
5       002          002        VIP

ИСПОЛЬЗОВАТЬ МОЙ ЗАПРОС:

SELECT * FROM TABLE WHERE (GO_A = '001' OR GO_B = '001') AND (TARIF = 'VIP' OR TARIF = 'FREE')

ТО мы получим:
1       001          001        VIP
2       001          004        ECONOM
3       003          002        VIP
4       003          001        FREE
5       002          002        VIP

 smile Быть не может... Назовите СУБД. 

Автор: ndbn 9.2.2012, 22:30
в скобочки возьмите всё, после where.  судя по скриншоту вы делаете выбрку не с and а с or между скобками

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)