Вопрос SQL по группам - я не могу выбрать каждый столбец - PullRequest
0 голосов
/ 17 февраля 2009

У меня есть база данных, где у каждой строки есть идентификатор, URL и XML. Идентификаторы уникальны, но столбец URL может содержать дубликаты. Мне нужны все URL-адреса без дубликатов, а для каждого URL-адреса мне нужны идентификатор и XML.

Если я запрашиваю только URL и Id, я использую следующий запрос:

select URL, max(ID) as ID from T1 group by URL

И все работает отлично.

Но когда я хочу также XML, и я использую следующий запрос:

select URL, max(ID) as ID, XML from T1 group by URL

Я получаю следующую ошибку:

ISC ERROR CODE:335544569
ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
user name required

Что я делаю не так?

Спасибо

Dikla

Спасибо за ответы. Я хочу добавить объяснение:
В случае дублирования URL, мне все равно, какой из них будет возвращен. Но мне нужно получить их без дубликатов, даже если XML отличается между строками. Возможно ли это?
Спасибо!

Ответы [ 4 ]

4 голосов
/ 17 февраля 2009
select id, url, xml
from table1
where id in (
    select min(id)
    from table1
    group by url)

даст вам строки с удаленными дублирующимися URL-адресами (и только первый экземпляр дублированных URL-адресов включен)

2 голосов
/ 17 февраля 2009

Вам нужно перечитать свой вопрос и подумать о нем.

Вы запрашиваете URL-адреса (которые могут быть дубликатами), но вам не нужны дубликаты, а также требуется идентификатор (который не дублируется) Пример данных:

1,http://www.google.com
2,http://www.yahoo.com
3,http://www.google.com

В этом случае что именно вы хотите вернуть, учитывая, что для Google существует несколько идентификаторов?

То же самое относится и к XML. Если он не уникален для данного URL, вам нужно указать, как получить только одну запись для URL, и поэтому ваш запрос не работает.

0 голосов
/ 17 февраля 2009
select urlMaxId.id, urlMaxId.url, table1.html from (select url, max(id) id from table1 group by url) urlMaxId inner join table1 on urlMaxId.id = table1.id
0 голосов
/ 17 февраля 2009

Вы не выполняете агрегатную функцию для столбца XML, вы должны включить ее в свою группу по.

Помните, что если данные различны для каждой строки, на самом деле они не смогут быть сгруппированы, и вы не получите результаты, которые вы ищете, все они будут теми, о которых вы просили базу данных:).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...