Avatar billede doncarnage Nybegynder
08. september 2010 - 01:32 Der er 9 kommentarer og
2 løsninger

Query med rækker, der har mere end én kolonne med random indhold?

Godaften,

Jeg kunne utrolig godt tænke mig at vide hvordan jeg laver en select query, hvor man henter de rækker der fx har mere end én kolonne med indhold ved navn = 'agurk'?

Dvs. altså ikke bare "select * from tabel where kolonne = 'agurk'"

Men hvor den henter alle kolonner, hvor inputtet er der mere end én gang..


Kort eksempel:

kolonne1|kolonne2
-----------------
...1....|..agurk.
...2....|..sol...
...3....|..tomat.
...4....|..agurk.
...5....|..sol...

I ovenstående vil jeg så gerne have at den henter række 1, 2, 4 og 5 frem pga. indholdet i kolonne2 går igen flere gange ;)


Men kan det lade sig gøre uden at man på forhånd angiver hvilket indhold man leder efter?
Avatar billede arne_v Ekspert
08. september 2010 - 03:07 #1
prøv:

SELECT kolonne1
FROM dintabel t1
WHERE (SELECT COUNT(*) FROM dintabel t2 WHERE t1.kolonne2=t1.kolonne2) > 1
Avatar billede teepee Nybegynder
08. september 2010 - 10:42 #2
arne>> du laver en count for hver række, dvs. lige nu bliver sol og agurk talt to gange. Jeg mistænker at det vil blive dræbende langsomt ved mange række.

Hvad med noget med

SELECT kolonne1
FROM dintabel t1
WHERE kolonne2 in (
  SELECT kolonne2
  FROM dintabel t2
  HAVING count(kolonne2)>1
  GROUP BY kolonne2)
Avatar billede doncarnage Nybegynder
08. september 2010 - 11:42 #3
arne_v:

SELECT    StudyNumber
FROM        tbl_member t1
WHERE    ((SELECT    COUNT(*)
                        FROM        tbl_member t2
                        WHERE    t1.StudyNumber = t1.StudyNumber) > 1)


Hvis jeg prøver med ovenstående får jeg godt nok nogle rækker ud, men jeg får omkring 5000 rækker, hvor jeg gerne blot skulle have haft ca. 100 - og dem jeg får ud har ingen dobbelte StudyNumbers, så ved ikke lige hvad det er den trækker ud der :S


------------------------------------------------------------

teepee:

SELECT    StudyNumber
FROM        tbl_member t1
WHERE    StudyNumber IN
                          (SELECT    StudyNumber
                            FROM          tbl_member t2
                            HAVING      COUNT(StudyNumber) > 1
                      GROUP BY StudyNumber)


Hvis jeg prøver med ovenstående får jeg følgende fejl:

Incorrect syntax near the keyword 'GROUP'.
Avatar billede doncarnage Nybegynder
08. september 2010 - 12:14 #4
Jeg fik den i stedet løst med dette:

http://www.petefreitag.com/item/169.cfm

Men smid et svar, og så ska i begge få points for hjælpen ;)
Avatar billede arne_v Ekspert
08. september 2010 - 15:21 #5
t1.StudyNumber = t1.StudyNumber

er ikke en god betingelse!

:-)
Avatar billede arne_v Ekspert
08. september 2010 - 15:22 #6
svar fra mig
Avatar billede arne_v Ekspert
08. september 2010 - 15:25 #7
teepee>

Det er muligt at den er langsom. Meget vil afhaenge af om der er index paa feltet og hvor smart optimizeren er.
Avatar billede arne_v Ekspert
08. september 2010 - 15:25 #8
Med hensyn til teepees SQL tror jeg bare at der skal byttes om paa GROUP BY og HAVING.
Avatar billede janus_007 Nybegynder
08. september 2010 - 21:52 #9
Ligeledes med t1.kolonne2=t1.kolonne2 , heller ikke en god løsning ;)
Avatar billede arne_v Ekspert
09. september 2010 - 03:14 #10
Korrekt.

Det skal naturligvis være t1 og t2.
Avatar billede teepee Nybegynder
09. september 2010 - 11:33 #11
Ja, det gik lidt hurtigt og jeg har ikke verificeret syntaxen, HAVING skal selvfølgelig efter GROUP BY og der må ikke være referencer mellem t1 og t2:

SELECT  t1.StudyNumber
FROM    tbl_member t1
WHERE  t1.StudyNumber IN
(SELECT  StudyNumber
FROM    tbl_member t2
GROUP BY t2.StudyNumber
HAVING  COUNT(t2.StudyNumber) > 1
)
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