SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 01.03.2012 20:56:59

papric
Участник
Зарегистрирован: 27.02.2012
Сообщений: 10

выборка

имеется таблица     compID | softID
                                 2           11
                                 2           12
                                 1           13
                                 1           11
                                 3           10


как из нее выбрать все compID у которых softID не равен 11 ( все компы где не установлена программа 11)?
запрос SELECT compID FROM table WHERE softID!=11 не работает, т.к. выберет например 2 с программой у которой софтИД=12, но и программа 11 установлена на 2!!! помогите!

Неактивен

 

#2 01.03.2012 22:01:47

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

Re: выборка

Ну, тут видно два способа.
Первый способ плохой - никогда так не делайте wink. Из всех компьютеров выбираем те, которые не попадают в множество тех, где программа установлена.
SELECT distinct compID FROM t WHERE compID NOT IN (SELECT compID FROM t WHERE softID = 11) t_al;

Второй способ получше:
SELECT compID FROM t GROUP BY by compID having max( if ( softID = 11, 1, 0)) = 0;

Отредактированно deadka (01.03.2012 22:02:24)


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

Неактивен

 

#3 01.03.2012 22:02:26

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

Re: выборка

select compID from `таблица` group by compID having group_concat(softID) not like '11,%' and group_concat(softID) not like '%,11,%' and group_concat(softID) not like '%,11';

Неактивен

 

#4 01.03.2012 23:04:00

papric
Участник
Зарегистрирован: 27.02.2012
Сообщений: 10

Re: выборка

спасибо, помогли!

Неактивен

 

Board footer

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