webForumDet fria alternativet

Är där mer än en person med samma namn? Så fall vilka

Databaser & SQL

6 svar · 446 visningar · startad av zeiss

Medlem sedan jan. 20094 inlägg
Frågan#1

Tabellen har följande utseende :

pNbr primary key
firstname varchar
lastname varchar
pnbr firstname lastname
850718-1234 Anna Book
830311-4443 Evert Andersson
....ca 100 personer

Hur ska man skriva sql frågan för att få fram studenter med samma namn
(förnamn,efternamn) men med olika pnbr.Använder mysql 5.1.Vet så mycket som att man ska använda subfråga.

Har kört fast helt x(

Medlem sedan dec. 20025 483 inlägg
#2

Välkommen till wF! :bire

select t.pnbr
     , t.firstname
     , t.lastname
  from tbl t
 where exists
       ( select 1 
           from tbl
          where pnbr <> t.pnbr
            and firstname = t.firstname
            and lastname = t.lastname )
order
    by t.lastname
     , t.firstname
     , t.pnbr
Medlem sedan jan. 20094 inlägg
#3

förtydligande

Tack peter.S!

Tackar även för snabbt svar.Men har lite funderingar.Där du skrev select 1 ,skrev du fel där? Jag har testat din kod och får noll som svar vilket inte är rätt :( (svaret ska bli 7 pers) Man behöver inte kopiera tebellen va? Anledning är detta pnbr <> t.pnbr det ser ut som du vill gemföra med en kopia av tabellen.Så kan du ta med allt som måste skrivas in om det nu inte var det du gjorde sist.

select t.pnbr
, t.firstname
, t.lastname
from tbl t
where exists
( select 1
from tbl
where pnbr <> t.pnbr
and firstname = t.firstname
and lastname = t.lastname )
order
by t.lastname
, t.firstname
, t.pnbr

Medlem sedan dec. 20025 483 inlägg
#4

Det fungerar utmärkt för mig. Det enda du skall behöva göra är att byta ut alla förekomster av tbl mot ditt tabellnamn.

"SELECT 1" är precis vad jag menar ;) eftersom det inte spelar någon roll i EXISTS vad som hämtas så kan där stå "1".

Du behöver inte göra någon kopia av tabellen, utan i EXISTS refererar vi till samma grundtabell som utanför.

Medlem sedan jan. 20094 inlägg
#5

får noll resultat...

Får inte det svar jag vill ha tyvär.Tabellen heter Students.Om jag förståt dig rätt ska jag skriva exakt så här:

select Students.pnbr
, Students.firstname
, Students.lastname
from Students
where exists
( select 1
from Students
where pnbr <> Students.pnbr
and firstname = Students.firstname
and lastname = Students.lastname )
order
by Students.lastname
, Students.firstname
, Students.pnbr

Är det korrekt uppfattat? :OO

Medlem sedan dec. 200012 464 inlägg
#6
select Students.pnbr
       , Students.firstname
       , Students.lastname
  from Students [b]S[/b]
 where exists
       (select 1
           from Students
         where [b]s.[/b]pnbr <> Students.pnbr
            and [b]s.[/b]firstname = Students.firstname
            and [b]s.[/b]lastname = Students.lastname)
 order by Students.lastname
       , Students.firstname
       , Students.pnbr
Medlem sedan jan. 20094 inlägg
#7

jag lyfter på hatten.....

Tackar för hjälpen för alla inblandade,tillslut trilla poletten ner så nu funkar det :birp

258 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)