Avatar billede brummelum Nybegynder
24. maj 2004 - 17:44 Der er 13 kommentarer og
1 løsning

Find kun den første blandt mange resultater

Har en tabel alá:

navn: test
Primær nøgle: autoID
Fremmednøgle: SiteID
datafelt: besk

Laver et udtræk:

select * from test where besk like '%hej%'

som giver mange resultater med samme fremmednøgle.

Mit spørgsmål er: Hvordan laver jeg en "distinct" på fremmednøglen, således der kun kommer et (gerne det med lavest autoID ) som resultet.
Avatar billede rasmusbg Nybegynder
24. maj 2004 - 17:53 #1
SELECT TOP 1 * FROM test WHERE besk LIKE '%hej%' ORDER BY SiteID DESC

er mit bud... :o)
Avatar billede brummelum Nybegynder
24. maj 2004 - 18:06 #2
tak - men det er desværre ikke nok. Jeg må nok uddybe:

Resultatet kun således ud:

autoID  SiteID  besk
2      4      1hej2
3      4      2hej2
5      5      8hej8
8      5      9hej2

Jeg skal både have resultatet med SiteID 4 og 5 med:

autoID  SiteID  besk
2      4      1hej2
5      5      8hej8
Avatar billede arne_v Ekspert
24. maj 2004 - 19:42 #3
SELECT MIN(autoID),SiteID FROM test WHERE besk like '%hej%' GROUP BY SiteID;

vil hente de 2 første søjler du ønsker

Den sidste søjle kunne hentes i seperat query, men måske er der noget smartere.
Avatar billede terry Ekspert
24. maj 2004 - 19:43 #4
SELECT    MIN(DISTINCT autoID) AS Expr1, SiteID, MIN(DISTINCT besk) AS Expr2
FROM        dbo.test
WHERE    (besk LIKE '%hej%')
GROUP BY SiteID
Avatar billede arne_v Ekspert
24. maj 2004 - 19:48 #5
Måske virker:

SELECT autoID,SiteID,besk
FROM test INNER JOIN (SELECT MIN(autoID) AS minAutoID,SiteID AS x FROM test WHERE besk like '%hej%' GROUP BY SiteID) ON autoID=minAutoID
Avatar billede terry Ekspert
24. maj 2004 - 19:51 #6
works fine Arne :o)
Avatar billede arne_v Ekspert
24. maj 2004 - 20:02 #7
Og jeg tror nok at output fra den vil være mere hensigtsmæssigt end
2 gange MIN.
Avatar billede terry Ekspert
24. maj 2004 - 20:07 #8
yes you're right Arne, 2 gange min can give the wrong result, would be nice with First() lik ein Access :o)
Avatar billede arne_v Ekspert
24. maj 2004 - 20:13 #9
så vil jeg ligge et svar
Avatar billede brummelum Nybegynder
24. maj 2004 - 20:19 #10
Tak for svarene - jeg tester på arnes bud, men får en SQL syntax fejl på ON delen:

Incorrect syntax near the keyword 'ON'.

SQL er, omsat til de navne som tabellen nu engang bruger:

SELECT PageID,SiteID,page
FROM WebRip_Page INNER JOIN
(SELECT MIN(PageID) AS minAutoID,SiteID AS x FROM WebRip_Page WHERE CONTAINS(html,'krimskrams')
GROUP BY SiteID) ON PageID=minAutoID
Avatar billede arne_v Ekspert
24. maj 2004 - 21:08 #11
Jeg har lige leget lidt med din originale struktur.

Med INNER JOIN fik jeg samme fejl.

Men følgende synes at virke:

SELECT autoID,SiteID,besk
FROM test,(SELECT MIN(autoID) AS minAutoID,SiteID AS x FROM test WHERE besk LIKE '%hej%' GROUP BY SiteID) AS dt WHERE test.autoID=dt.minAutoID
Avatar billede arne_v Ekspert
24. maj 2004 - 21:09 #12
Det var ikke INNER JOIN.

Følgende virker også:

SELECT autoID,SiteID,besk
FROM test INNER JOIN (SELECT MIN(autoID) AS minAutoID,SiteID AS x FROM test WHERE besk LIKE '%hej%' GROUP BY SiteID) AS dt ON test.autoID=dt.minAutoID
Avatar billede arne_v Ekspert
24. maj 2004 - 21:10 #13
Det er tilsyneladende
  AS dt
for at give output fra SELECT et navn der gør forskellen
Avatar billede brummelum Nybegynder
24. maj 2004 - 21:22 #14
Ja, nu virker det også her - tusind tak for hjælpen !!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester