Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > [mysql]Выбор записи с уникальным значением в поле


Автор: Sorrow 8.8.2008, 11:06
Заранее извиняюсь, если не туда написал.
Есть таблица вида:

id -- name -- pid
1        A       NULL
2        B       1
3        C       1
4        D       2
5        E       3
6        F       3
7        G       4

Подскажите пожалуйста, как составить запрос для вывода id не Null, с минимальным, не повторяющимся значением pid (в данном случае id=4)?


Автор: ТоляМБА 8.8.2008, 11:20
Код
Select *
From TableX
Where
pid=
(Select Min(a.pid)
From
(SELECT  TableX.Pid
FROM TableX
WHERE (((TableX.Pid) Is not Null))
group by TableX.Pid
having count(TableX.Pid)=1) as a)


Добавлено через 6 минут и 5 секунд
Строки 7-11 Выборка всех неповторяющихся и не null pid,
5-6 Выборка из вышеуказанного результата минимального pid
1-4 выборка из таблицы всей записи с нужным pid.

ЗЫ. Модераторам: что-то оформление Кода SQL глючит

Автор: skyboy 8.8.2008, 12:29
Код

SELECT min(id)
FROM  tableX
GROUP BY pid
HAVING count(*) = 1


Добавлено через 38 секунд
Цитата(ТоляМБА @  8.8.2008,  10:20 Найти цитируемый пост)
что-то оформление Кода SQL глючит

где?

Автор: ТоляМБА 8.8.2008, 12:48
skyboy
Цитата(Sorrow @  8.8.2008,  14:06 Найти цитируемый пост)
с минимальным, не повторяющимся значением pid
В твоём случае если pid со значениями 2 и 4 поменять местами - выдаст запись тоже с id=4, хотя по условию вопроса должно с id=7. Или я не догнал вопрос?
Цитата(skyboy @  8.8.2008,  15:29 Найти цитируемый пост)
где?
Раньше была подцветка кода и нумерация строк сейчас нету.

Автор: skyboy 8.8.2008, 13:29
Цитата(ТоляМБА @  8.8.2008,  11:48 Найти цитируемый пост)
Раньше была подцветка кода и нумерация строк сейчас нету.

у меня есть. сброс кеша не привел к катастрофе: все работает по-прежнему.
Цитата(ТоляМБА @  8.8.2008,  11:48 Найти цитируемый пост)
выдаст запись тоже с id=4, хотя по условию вопроса должно с id=7

черт. похоже, ты прав и это я неверно понял условие. 
но, вообще говоря, у меня min работает только в пределах одинаковых pid, потому вернет все. и id=4, и id=7 и все остальные с уникальными pid. а в каком порядке вернет - неизвестно. так что, да, запрос мой неверен.
тогда предлагаю так:
Код

SELECT min(id)
FROM  tableX
GROUP BY pid
HAVING count(*) = 1
ORDER BY pid 
LIMIT 1

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