![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование DISTINCT в LocalSQL [D7, Paradox]
tarkus © (2007-05-29 23:06:00)Здравствуйте!
Нужно вывести записи, так чтобы в одном из полей (Number) не было повторов.
SELECT DISTINCT Number FROM table ...
работает, но выводит один столбец, а мне нужны и другие.
Можно ли это как-то сделать?
Jan1 (2007-05-30 12:43:00) [1]
> вообще-то надо not t2.Id IS NULL
сори, автору это несущественно :)
Jan1 (2007-05-30 12:42:00) [2]
> SELECT t1.*
> FROM
> table t1
> LEFT JOIN table t2 ON (t1.A = t2.A) AND (t1.Id < t2.Id)
> WHERE
> t2.Id IS NULL
вообще-то надо not t2.Id IS NULL
Ну и я бы заюзал мой любимый exists :)
SELECT t1.*
FROM table as t1
WHERE exists(select * from table as t2
where (t1.A = t2.A) AND (t1.Id < t2.Id))
tarkus (2007-05-30 11:08:00) [3]> ЮЮ Спасибо огромное!
Anatoly Podgoretsky (2007-05-30 09:59:00) [4]> Loginov Dmitry (30.05.2007 08:34:10) [10]
Учим генотип, это классический пример из справки
ЮЮ (2007-05-30 09:00:00) [5]Если данных в таблице много и IN + GROUP BY тяжеловат, можно и так
SELECT t1.*
FROM
table t1
LEFT JOIN table t2 ON (t1.A = t2.A) AND (t1.Id < t2.Id)
WHERE
t2.Id IS NULL
тогда в выборку попадут записи с наибольшим Id в группе по A
Sergey13 (2007-05-30 08:41:00) [6]> [10] Loginov Dmitry © (30.05.07 08:34)
А что тут жестяного? Это же не select from select.
Loginov Dmitry (2007-05-30 08:34:00) [7]Вложенный селект для парадокса - это жесть ))
ЮЮ (2007-05-30 04:37:00) [8]SELECT * FROM table WHERE ID IN
(SELECT MIN (ID) FROM table GROUP BY A)
tarkus (2007-05-30 01:35:00) [9]Пример очень близок к реальной задаче, то что в поле А изначально есть дубли - изменить нельзя, таковы данные
Может есть какое-то изящное решение моей задачи с помощью SQL, без тупого перебора?
Германн (2007-05-30 01:15:00) [10]
> tarkus (30.05.07 00:59) [6]
>
> ID A B C
> 1 1 суп овощной супы
> 2 1 овощной суп супы
> 3 2 компот яблочный напитки
> 4 2 яблочный компот напитки
>
> меня бы устроила любая пара (1 и 3) или (1 и 4) или (2
> и 3) или (2 и 4)
>
Тебя бы может и устроила, но вот SQL имхо требует точныхкритерий для выборки.
Имхо такие проблемы решаются не фомировкой запроса, а установкой индекса по полю А, чтобы не позволять создавать в таблице дубли.. Хотя я и понимаю, что пример в [6] выдуман "навскидку".
tarkus (2007-05-30 00:59:00) [11]ID A B C
1 1 суп овощной супы
2 1 овощной суп супы
3 2 компот яблочный напитки
4 2 яблочный компот напитки
меня бы устроила любая пара (1 и 3) или (1 и 4) или (2 и 3) или (2 и 4)
Германн (2007-05-30 00:42:00) [12]
> хотелось бы получить столбцы А,B и C с уникальными значениями
> именно в А, а не совокупности А,B и C
>
Таблица:
A B C
1 2 3
1 4 5
1 6 7
Вопрос: Какую из трёх строк запрос должен выбрать? И по какому критерию?
tarkus (2007-05-30 00:30:00) [13]Это понятно,
SELECT DISTINCT A ... выводит столбец А с уникальными значениями
SELECT DISTINCT A,B,C ... выводит столбцы А,B и C с уникальной совокупностью значений в каждой строке, т.е. в А значения могут повторяться
хотелось бы получить столбцы А,B и C с уникальными значениями именно в А, а не совокупности А,B и C
Loginov Dmitry (2007-05-30 00:02:00) [14]> а как, если не секрет?
Имел ввиду, что можно вывести и другие поля.
DISTINCT просто запрещает выборку двух идентичных строк.
tarkus (2007-05-29 23:46:00) [15]а как, если не секрет?
Loginov Dmitry (2007-05-29 23:38:00) [16]> Можно ли это как-то сделать?
Можно