Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[SQL] Distinct werkt niet goed

Pagina: 1
Acties:

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11 22:31
Hoi,

Ik probeer de volgende query uit te voeren:
SQL:
1
select distinct Topic as DisplayStr, ID from Messages where Topic like '%i%'

Wat ik hier als resultaat wil is het volgende:
Een set van topic titles en de bijbehoorende ID's. Maar aangezien titles niet uniek zijn (ivm replies) wil ik dus maar een keer de topic title hebben. Nu moet distinct dit voor elkaar krijgen, volgens mijn boek dan... maar dat werkt hier dus lekker niet. Ik heb mijn data in een Access database staan en deze benader ik met PHP via ADO. Begrijp ik het gebruik van distinct gewoon fout, of is dit weer een dialect kwestie?

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 27-11 16:36
Je probleem ligt in het feit dat je naast het met distinct gemarkeerde veld ook nog een ander veld in je query resultaat wilt tonen.

DISTINCT is geen relationele operatie en daardoor is er geen verband meer tussen het gegeven Topic en ID.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 27-11 16:36
Probeer dit is, is zo even uit mn blote kop:
code:
1
2
3
4
5
6
7
select Topic as DisplayStr, ID
from Messages
where ID IN
(
   select max(ID) from Messages
   group by Topic
)


Dit zou volgens mij moeten werken, probeer wel even goed te begrijpen waarom het niet werkt... Ik heb niet gekeken, maar dit zal ook wel als een join te doen zijn. Joins zijn vaak wat effcienter. (sub query's worden onderwater vaak omgezet in joins)

Verwijderd

Access gebruikt * als wildcards en niet % :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
In access kun je evengoed de '%' wildcards gebruiken, deze zijn nl. de ANSI wildcards.

De DISTINCT werkt zeker goed.... Een distinct zorgt ervoor dat er geen dubbele rijen getoond worden. Aangezien in uw geval Topic (DisplayStr) meerdere keren voorkomt, maar ID uniek is, zal iedere rij een unieke rij zijn. Er zal nl. nooit 2x een rij voorkomen met hetzelfde ID en DisplayStr.

https://fgheysels.github.io/


  • bakkerl
  • Registratie: Augustus 2001
  • Laatst online: 23-11 21:51

bakkerl

Let there be light.

probeer eens:

SELECT Topic as DisplayStr, ID
FROM Messages
WHERE Topic LIKE '%i%'
GROUP BY Topic

Verwijderd

whoami schreef op 05 september 2002 @ 09:29:
In access kun je evengoed de '%' wildcards gebruiken, deze zijn nl. de ANSI wildcards.
Hmm, als ik in Access een query maak en bij like % gebruik als wildcard dan krijg ik helemaal niks als resultaat, gebruik ik een * dan doet ie het prima.
Weet niet wat er gebeurd als ODBC er tussen hangt :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
Verwijderd schreef op 05 september 2002 @ 09:40:
[...]


Hmm, als ik in Access een query maak en bij like % gebruik als wildcard dan krijg ik helemaal niks als resultaat, gebruik ik een * dan doet ie het prima.
Weet niet wat er gebeurd als ODBC er tussen hangt :)


Hmm. Strange.
Ff getest, en idd je hebt gelijk.
Met ODBC ertussen werkt het wel.

https://fgheysels.github.io/


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11 22:31
The - DDD schreef op 05 september 2002 @ 01:07:
Probeer dit is, is zo even uit mn blote kop:
code:
1
2
3
4
5
6
7
select Topic as DisplayStr, ID
from Messages
where ID IN
(
   select max(ID) from Messages
   group by Topic
)


Dit zou volgens mij moeten werken, probeer wel even goed te begrijpen waarom het niet werkt... Ik heb niet gekeken, maar dit zal ook wel als een join te doen zijn. Joins zijn vaak wat effcienter. (sub query's worden onderwater vaak omgezet in joins)
Dit was 'm inderdaad gedeeltelijk, de query is nu als volgt:
SQL:
1
2
3
4
5
6
7
8
9
10
SELECT Topic AS DisplayStr, ID
FROM Messages
WHERE ID IN
(
    SELECT MAX( ID)
    FROM Messages
    GROUP BY Topic
)
AND
Topic LIKE '%i%'

DISTINCT werkt inderdaad anders dan ik dacht te lezen gisteravond :) In het boek stond een voorbeeld met twee kolommen, maar daar zaten dubbele resultaten tussen als combinatie, en dat detail had ik even gemist |:(

Nog even over de wildcards, met * vind ie niks en met % wel. Komt waarschijnlijk omdat ADO er tussen zit.

In ieder geval iedereen bedankt voor de hulp :)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 16:31

Crazy D

I think we should take a look.

_Mo_ schreef op 05 september 2002 @ 10:22:
Nog even over de wildcards, met * vind ie niks en met % wel. Komt waarschijnlijk omdat ADO er tussen zit.
In ADO is de wildcard "gewoon" % alleen binnen Access zelf is * de wildcard.

Exact expert nodig?

Pagina: 1