Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка уникальных данных / 9 сообщений из 9, страница 1 из 1
29.10.2015, 16:57:37
    #39090326
Ne_znayu_python
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
Помогите, уже час туплю и что-то не могу сделать запрос.
Есть три таблицы, в одной хранится различные id товаров. Во второй общие разделы. В третьей таблице подразделы.
Нужно сделать выборку всех подразделов, если в кортеже в поле P.name значение Основной, то надо проверить чтоб поле P.nom было больше нуля, а если оно меньше нуля, то провести такую же проверку для кортежа с полем Дублирующий. Т.е. единственное значение из этих двух должно попасть.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT A.node_id, P.id, P.name, P.nom, P.unit FROM T3_A as A 
INNER JOIN Node AS N on (A.node_id = N.node_id) 
INNER JOIN L_Par as P ON (N.lev2 = P.lev2)

where (A.r_id = 79871413 or A.r_id = 79871350)-- Для примера взял всего 2 id

and (P.name = "Основной" or P.name = "Дублирующий")
order by P.name;


Здесь выйдет 4 кортежа, т.к P.nom больше нуля везде. А надо 2, как описал выше.
Помогите.
...
Рейтинг: 0 / 0
29.10.2015, 21:33:22
    #39090570
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select * from t3_a a
    join t3_a b on r_id a.id = b.id && in (79871413, 79871350)
    join node using (node_id)
    join (select * from par
           group by id
           having min(case 
               when name = 'Основной' && nom > 0 then 1 
               when name = 'Дублирующий' && nom > 0 then 2
               else 100500
               end)
        ) p 
        using (lev2)
...
Рейтинг: 0 / 0
30.10.2015, 11:31:22
    #39090893
Ne_znayu_python
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
Lumix,

странно, ругается на все, что следует после in (79871413, 79871350).
...
Рейтинг: 0 / 0
30.10.2015, 11:41:19
    #39090905
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
Lumix
Код: sql
1.
on r_id a.id = b.id

это что за фигня?
...
Рейтинг: 0 / 0
30.10.2015, 11:50:34
    #39090917
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
Ne_znayu_pythonругается на все, что следует после in (79871413, 79871350).
Если не понимаете, на что ругается, цитируйте текст сообщения об ошибке, а не свои домыслы.
Впрочем, если понимаете - тоже цитируйте. Всегда существует вероятность, что понимаете неправильно.
...
Рейтинг: 0 / 0
30.10.2015, 11:58:49
    #39090927
Ne_znayu_python
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
Akina, выше написал, точно так же говорит и sql, syntax error near r_id a.id = b.id AND in (79871413, 79871350)
...
Рейтинг: 0 / 0
30.10.2015, 12:06:44
    #39090937
Lumix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
tanglir, это просто опечатка
я ведь эти запросы "вслепую" пишу
не на чем ведь проверять их...

Код: sql
1.
join t3_a b on a.id = b.id && r_id in (79871413, 79871350)
...
Рейтинг: 0 / 0
30.10.2015, 12:13:30
    #39090941
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
Ne_znayu_pythonвыше написал, точно так же говорит и sql, syntax error near r_id a.id = b.id AND in (79871413, 79871350)
Как я и говорил - ты его не понимаешь. Правда, ты и сейчас не цитату привёл (фигня, когда-нить научишься), но главное - сервер цитирует часть запроса ровно с того символа, который ему не по нраву - то есть ему не нравится
r_id . На что, кстати, уже указывал tanglir .
...
Рейтинг: 0 / 0
30.10.2015, 12:56:21
    #39091009
Ne_znayu_python
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка уникальных данных
Понял, понял теперь.

Код: plsql
1.
2.
3.
4.
5.
           having min(case 
               when name = 'Основной' && nom > 0 then 1 
               when name = 'Дублирующий' && nom > 0 then 2
               else 100500
               end)


Этот момент словно не отрабатывает вообще. Он не выбирает, а складывает оба поля.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка уникальных данных / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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