SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 27.04.2010 17:42:44

north83
Участник
Зарегистрирован: 27.07.2009
Сообщений: 24

Хитрая выборка данных из таблицы

При помощи запроса:

SELECT DISTINCT
Catalog_TovarCvet.CvetId,
Catalog_TovarCvet.SCvetId
FROM `Catalog_Tovar`
INNER JOIN `Catalog_TovarCvet` ON `Catalog_TovarCvet`.`TovarId` = `Catalog_Tovar`.`Id`
WHERE
    `Catalog_Tovar`.`SeriaId` = 5502 AND
    ( `Catalog_TovarCvet`.`CvetId` = 413 OR `Catalog_TovarCvet`.`CvetId` = 0 AND `Catalog_TovarCvet`.`SCvetId` NOT LIKE 0 )  
ORDER BY
Catalog_TovarCvet.CvetId DESC,
Catalog_TovarCvet.SCvetId ASC


Получаю следующий результат:

CvetId | SCvetId
413     |   11
413     |   46
413     |   47
0        |   10
0        |   46
0        |   47
0        |   56

Мне надо отсеить еще следующие строки...   0  | 10  и   0  | 56
т.е. те что CvetId имеют 0 и у которых SCvetId не соответствует SCvetId у тех, что СvetId не равен 0

Вот как то так.. уже весь мозг сломал... может как то через временные таблицы.. или все же можно какое то грамотное условие в запросе сформировать...
Прошу помощи у Гуру SQL`я

Отредактированно north83 (27.04.2010 19:11:44)

Неактивен

 

#2 27.04.2010 21:07:58

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Хитрая выборка данных из таблицы

0. Создать временную таблицу temp.
1. При помощи вашего запроса записываете полученный результат во временную таблицу temp. Часть ORDER BY в запросе при этом не нужна.

2. SELECT SCvetId FROM temp GROUP BY SCvetId HAVING count(CvetId)=1 and CvetId=0;

Получаете значения SCvetId, которые нужно отбросить.Формируете запрос:

3. SELECT * FROM temp WHERE SCvetId NOT IN (список значений из второго запроса) ORDER BY
Catalog_TovarCvet.CvetId DESC,
Catalog_TovarCvet.SCvetId ASC;

4. Удалить временную таблицу.

Неактивен

 

#3 27.04.2010 21:34:10

north83
Участник
Зарегистрирован: 27.07.2009
Сообщений: 24

Re: Хитрая выборка данных из таблицы

Спасибо большое побежал пробовать ) уже не первый раз меня выручаете )
--------------------------
Супер все получилось...

Отредактированно north83 (28.04.2010 16:28:51)

Неактивен

 

Board footer

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