|
| En lille udfordring Fra : Jacob Atzen |
Dato : 18-02-03 15:39 |
|
Hej NG,
Jeg sidder og kæmper med at lave en lille forespørgsel.
Jeg har en tabel med id, navn og adresse.
Der er nogen navne der forekommer flere gange i tabellen, men muligvis
med forskellig adresse. Jeg vil nu gerne have alle de adresser, der er
tilknyttet navne, der forekommer mere end 1 gang.
Jeg kan finde de relevante navne ved:
SELECT count(*) as c, navn FROM table GROUP BY navn HAVING c > 1;
Men jeg kan ikke finde ud af, hvordan jeg får den til at vise de
tilhørende adresser. Håber nogen kan hjælpe.
Det skal nævnes, at jeg bruger MySQL 3.23.x så jeg kan ikke bruge
subselects :-/
--
Med venlig hilsen
Jacob Atzen
| |
Kim Schulz (18-02-2003)
| Kommentar Fra : Kim Schulz |
Dato : 18-02-03 15:56 |
|
On 18 Feb 2003 15:39:09 +0100
Jacob Atzen <jaa@interflow.dk> wrote:
> Hej NG,
>
> Jeg sidder og kæmper med at lave en lille forespørgsel.
>
> Jeg har en tabel med id, navn og adresse.
>
> Der er nogen navne der forekommer flere gange i tabellen, men muligvis
> med forskellig adresse. Jeg vil nu gerne have alle de adresser, der er
> tilknyttet navne, der forekommer mere end 1 gang.
>
> Jeg kan finde de relevante navne ved:
> SELECT count(*) as c, navn FROM table GROUP BY navn HAVING c > 1;
>
> Men jeg kan ikke finde ud af, hvordan jeg får den til at vise de
> tilhørende adresser. Håber nogen kan hjælpe.
>
> Det skal nævnes, at jeg bruger MySQL 3.23.x så jeg kan ikke bruge
> subselects :-/
hvad med noget ala?
select adresse, navn from table group by navn having count(*) > 1;
eller måske med WHERE i stedet for HAVING
| |
Jacob Atzen (18-02-2003)
| Kommentar Fra : Jacob Atzen |
Dato : 18-02-03 16:28 |
|
Kim Schulz <kim@schulz.dk> writes:
> hvad med noget ala?
>
> select adresse, navn from table group by navn having count(*) > 1;
> eller måske med WHERE i stedet for HAVING
Den går ikke - jeg får kun en adresse ud til hvert navn. Jeg vil gerne
have alle adresser tilknyttet navnet.
--
Med venlig hilsen
Jacob Atzen
| |
Kim Schulz (18-02-2003)
| Kommentar Fra : Kim Schulz |
Dato : 18-02-03 20:53 |
|
On 18 Feb 2003 16:27:37 +0100
Jacob Atzen <jaa@interflow.dk> wrote:
> Kim Schulz <kim@schulz.dk> writes:
>
> > hvad med noget ala?
> >
> > select adresse, navn from table group by navn having count(*) > 1;
> > eller måske med WHERE i stedet for HAVING
>
> Den går ikke - jeg får kun en adresse ud til hvert navn. Jeg vil gerne
> have alle adresser tilknyttet navnet.
prøv at fjerne group by navn så.
| |
Carsten Schack-Eriks~ (18-02-2003)
| Kommentar Fra : Carsten Schack-Eriks~ |
Dato : 18-02-03 23:47 |
|
> Hej NG,
>
> Jeg sidder og kæmper med at lave en lille forespørgsel.
>
> Jeg har en tabel med id, navn og adresse.
>
> Der er nogen navne der forekommer flere gange i tabellen, men muligvis
> med forskellig adresse. Jeg vil nu gerne have alle de adresser, der er
> tilknyttet navne, der forekommer mere end 1 gang.
>
> Jeg kan finde de relevante navne ved:
> SELECT count(*) as c, navn FROM table GROUP BY navn HAVING c > 1;
>
select navn,adresse from table where navn in (select navn from table group
by navn having count(*)>1)
/Carsten
| |
Kim Schulz (19-02-2003)
| Kommentar Fra : Kim Schulz |
Dato : 19-02-03 00:28 |
|
On Tue, 18 Feb 2003 23:46:47 +0100
"Carsten Schack-Eriksen" <carsten@schack-eriksen.dk> wrote:
> > Hej NG,
> >
> > Jeg sidder og kæmper med at lave en lille forespørgsel.
> >
> > Jeg har en tabel med id, navn og adresse.
> >
> > Der er nogen navne der forekommer flere gange i tabellen, men
> > muligvis med forskellig adresse. Jeg vil nu gerne have alle de
> > adresser, der er tilknyttet navne, der forekommer mere end 1 gang.
> >
> > Jeg kan finde de relevante navne ved:
> > SELECT count(*) as c, navn FROM table GROUP BY navn HAVING c > 1;
> >
>
> select navn,adresse from table where navn in (select navn from table
> group by navn having count(*)>1)
ingen subselects
| |
Kristian Damm Jensen (19-02-2003)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 19-02-03 10:37 |
|
Kim Schulz wrote:
>
> On 18 Feb 2003 16:27:37 +0100
> Jacob Atzen <jaa@interflow.dk> wrote:
> > Kim Schulz <kim@schulz.dk> writes:
> >
> > > hvad med noget ala?
> > >
> > > select adresse, navn from table group by navn having count(*) > 1;
> > > eller måske med WHERE i stedet for HAVING
> >
> > Den går ikke - jeg får kun en adresse ud til hvert navn. Jeg vil gerne
> > have alle adresser tilknyttet navnet.
>
> prøv at fjerne group by navn så.
Uden group by vil count tælle det samlede antal rækker i tabellen.
--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.
| |
Kristian Damm Jensen (19-02-2003)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 19-02-03 10:40 |
|
Jacob Atzen wrote:
>
> Hej NG,
>
> Jeg sidder og kæmper med at lave en lille forespørgsel.
>
> Jeg har en tabel med id, navn og adresse.
>
> Der er nogen navne der forekommer flere gange i tabellen, men muligvis
> med forskellig adresse. Jeg vil nu gerne have alle de adresser, der er
> tilknyttet navne, der forekommer mere end 1 gang.
>
> Jeg kan finde de relevante navne ved:
> SELECT count(*) as c, navn FROM table GROUP BY navn HAVING c > 1;
>
> Men jeg kan ikke finde ud af, hvordan jeg får den til at vise de
> tilhørende adresser. Håber nogen kan hjælpe.
>
> Det skal nævnes, at jeg bruger MySQL 3.23.x så jeg kan ikke bruge
> subselects :-/
Der er mange løsninger på problemet - og alle dem jeg kan komme i tanker
om, kræver at man har subselect under en eller anden form; i
where-klausulen, from klausulen eller select-klausulen.
Uden subselect er det eneste fornuftige alternativ at hælde skidtet ned
i en temporær tabel først, og så joine med den bagefter.
--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.
| |
Nis Jorgensen (19-02-2003)
| Kommentar Fra : Nis Jorgensen |
Dato : 19-02-03 11:20 |
|
On 18 Feb 2003 15:39:09 +0100, Jacob Atzen <jaa@interflow.dk> wrote:
>Hej NG,
>
>Jeg sidder og kæmper med at lave en lille forespørgsel.
>
>Jeg har en tabel med id, navn og adresse.
>
>Der er nogen navne der forekommer flere gange i tabellen, men muligvis
>med forskellig adresse. Jeg vil nu gerne have alle de adresser, der er
>tilknyttet navne, der forekommer mere end 1 gang.
>
>Jeg kan finde de relevante navne ved:
>SELECT count(*) as c, navn FROM table GROUP BY navn HAVING c > 1;
>
>Men jeg kan ikke finde ud af, hvordan jeg får den til at vise de
>tilhørende adresser. Håber nogen kan hjælpe.
>
>Det skal nævnes, at jeg bruger MySQL 3.23.x så jeg kan ikke bruge
>subselects :-/
SÃ¥ har du jo selv bedt om udfordringen ...
SELECT t1.navn, t1.adresse
FROM table as t1, table as t2
WHERE t1.navn = t2.navn
GROUP BY t1.navn, t1.adresse
HAVING count(*) > 1
--
Nis Jørgensen
Amsterdam
Please include only relevant quotes, and reply below the quoted text. Thanks
| |
Kristian Damm Jensen (19-02-2003)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 19-02-03 12:36 |
|
Nis Jorgensen wrote:
>
<snip>
> SÃ¥ har du jo selv bedt om udfordringen ...
Og så i den grad...
> SELECT t1.navn, t1.adresse
> FROM table as t1, table as t2
> WHERE t1.navn = t2.navn
> GROUP BY t1.navn, t1.adresse
> HAVING count(*) > 1
Men det nytter jo ikke noget, da det netop er pointen at adresserne er
forskellige.
--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.
| |
Nis Jorgensen (20-02-2003)
| Kommentar Fra : Nis Jorgensen |
Dato : 20-02-03 12:08 |
|
On Wed, 19 Feb 2003 12:36:23 +0100, Kristian Damm Jensen
<kristian-damm.jensenRE@MOVEcgey.com> wrote:
>Nis Jorgensen wrote:
>>
><snip>
>
>> SÃ¥ har du jo selv bedt om udfordringen ...
>
>Og så i den grad...
>
>> SELECT t1.navn, t1.adresse
>> FROM table as t1, table as t2
>> WHERE t1.navn = t2.navn
>> GROUP BY t1.navn, t1.adresse
>> HAVING count(*) > 1
>
>Men det nytter jo ikke noget, da det netop er pointen at adresserne er
>forskellige.
Ja ... hvis vi har folgende i vores tabel
Navn Adresse
---- -------
Nis Vej 1
Nis Gade 32
Jan Anden vej
bliver resultatet af FROM + WHERE:
t1.navn t1.adresse t2.navn t2.adresse
------- ---------- ------- ----------
Nis Vej 1 Nis Vej 1
Nis Vej 1 Nis Gade32
Nis Gade 32 Nis Vej 1
Nis Gade 32 Nis Gade32
Jan Anden vej Jan Anden vej
Herefter grupperes og tælles
t1.navn t1.adresse Count(*)
------- ---------- --------
Nis Vej 1 2
Nis Gade 32 2
Jan Anden vej 1
og filtreres paa Count(*) >1
t1.navn t1.adresse
------- ----------
Nis Vej 1
Nis Gade 32
--
Nis Jørgensen
Amsterdam
Please include only relevant quotes, and reply below the quoted text. Thanks
| |
Kristian Damm Jensen (21-02-2003)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 21-02-03 09:13 |
|
Nis Jorgensen wrote:
>
> On Wed, 19 Feb 2003 12:36:23 +0100, Kristian Damm Jensen
> <kristian-damm.jensenRE@MOVEcgey.com> wrote:
>
<snip>
> >Men det nytter jo ikke noget, da det netop er pointen at adresserne er
> >forskellige.
>
> Ja ... hvis vi har folgende i vores tabel
>
> Navn Adresse
> ---- -------
> Nis Vej 1
> Nis Gade 32
> Jan Anden vej
>
<snip>
> t1.navn t1.adresse
> ------- ----------
> Nis Vej 1
> Nis Gade 32
Ja. Undskyld, jeg havde ikke bemærket dit self-join.
--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.com | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.
| |
Jacob Atzen (20-02-2003)
| Kommentar Fra : Jacob Atzen |
Dato : 20-02-03 12:44 |
|
Nis Jorgensen <nis@dkik.dk> writes:
> Så har du jo selv bedt om udfordringen ...
Nej, jeg stillede den for nu at være pedantisk
> SELECT t1.navn, t1.adresse
> FROM table as t1, table as t2
> WHERE t1.navn = t2.navn
> GROUP BY t1.navn, t1.adresse
> HAVING count(*) > 1
Tak for svaret. Det var det jeg manglede.
--
Med venlig hilsen
Jacob Atzen
| |
Nikolaj Hansen (19-02-2003)
| Kommentar Fra : Nikolaj Hansen |
Dato : 19-02-03 17:23 |
|
Dit problem kan løses ved at lave lidt om i din datamodel.
Hvis du har dine Person relaterede data i en tabel, og dine Adresse data
i en anden kan du lave en N:M relation i mellem de to tabeller. Det vil
betyde at:
- Flere personer kan bo på den samme adresse.
- En person kan bo på flere adresser.
Det er i øvrigt sådan at KOB databasen (Firmaer i DK) og CPR databasen
(Personer i DK) virker
Men dem skal man betale for. Oracle notation:
Select *
from
Person a, Address b, Person_address c
where
a.Perid = c.Perid and
c.addid = b.addid (+);
Altså en outer join på address tabellen for at få en forekomst af de
andre data, hver gang der er en række i address tabellen.
| |
|
|