Помогите составить запрос

N
На сайте с 14.06.2004
Offline
107
732

Есть таблица с записями :

town location name

5 3 Vasya

5 4 Vasya

5 0 Vasya

5 2 Vasya

..................................

Нужно выбрать все записи в которой город=5 и имя одно

В результате выборки если поле location содержит больше одного значения, то мне вываливает кучу дублирующих записей

Как в запросе исключить включение в поиск поля location ?

(тоесть не хочу писать SELECT DISTINCT id, parent, список 20 полей без location ...)

Есть какой-то способ или прийдется все-таки перечислять все поля

N
На сайте с 06.05.2007
Offline
419
#1

мне не совсем понятно, но похоже вам достаточно дописать в конце запроса " limit 1 ". это просто останавливает выполнение как только найдется одна запись.

Кнопка вызова админа ()
I
На сайте с 29.04.2006
Offline
135
#2

Читал..читал..так и не понял.Можно более понятно написать? И привели бы пример своего запроса...

N
На сайте с 14.06.2004
Offline
107
#3
ipconfig:
Читал..читал..так и не понял.Можно более понятно написать? И привели бы пример своего запроса...

Есть таблица:

user_name town location

Vasya 5 1

Vasya 5 2

Vasya 5 4

Igor 5 5

Igor 5 2

Dima 5 4

Dima 5 2

Vova 5 2

Sasha 5 4

Запись: имя пользователя, город, район

Например Вася живет в городе 5 и имеет доступ к району 1,2,4

Игорь живет в городе 5 имеет доступ к рйону 5 и 2

Нужно выбрать из таблицы имена из города 5 чтобы они не повторялись(не учитывать поле location)

N
На сайте с 06.05.2007
Offline
419
#4

тогда без distinct никак

вы бы лучше разбили на две таблицы - (ид,имя,город) и отношения(ид,район)

в этом случае и выбирать было бы проще.

то что у вас 20 полей возможно показывает что вы не знакомы с нормализацией. для многих запросов(таких как ваш) нормализация автоматически ускоряет выполнение.

N
На сайте с 14.06.2004
Offline
107
#5

20 это я образно сказал. Просто хотелось узнать можно ли сделать не перечислением полей а как-то одним выражением..

N
На сайте с 06.05.2007
Offline
419
#6

Наверное нет. Очень сомнительная экономия на символах в программе получится.

Dreammaker
На сайте с 20.04.2006
Offline
569
#7
GROUP BY user_name WHERE town = 5

по идее должно бы помочь. Но всё же выше правильно сказали, что проблема с нормализацией.

N
На сайте с 06.05.2007
Offline
419
#8

Dreammaker, ну во первых, синтаксически нужно писать не where, а having.

во вторых очень сомнительный трюк. в субд отличных от mysql такое невозможно.

Dreammaker
На сайте с 20.04.2006
Offline
569
#9

netwind, ну я несколько перепутал порядок операторов. Имелось в виду

WHERE town = 5 GROUP BY user_name

Такое я так понимаю пройдёт под понимающими SQL субд :)

N
На сайте с 06.05.2007
Offline
419
#10

нет, я о другом : обычно в результате должны быть или поля указанные в группировке или агрегирующие функции.

select * from group by user_name ; не должно пойти

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий