[mySQL] UNION join op 1 variabele

Pagina: 1
Acties:

  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

Topicstarter
Even een kort vraagje.

ik heb deze query:

code:
1
2
3
4
(SELECT voorletters, tussenvoegsel, achternaam, email FROM mailinglist)
UNION
(SELECT voorletters, tussenvoegsel, achternaam, email FROM user WHERE nieuwsbrief = 1)
ORDER BY email


Nou wil ik graag alle dubbele emailadressen eruit halen.
Omdat voorletters, tussenvoegsel en/of achternaam kunnen verschillen komen er dubbele emailadressen uit deze query rollen.

Is er een mogelijkheid om deze eruit te filteren?

  • JQR
  • Registratie: Augustus 2001
  • Laatst online: 30-04 11:43

JQR

probeer eens wat te spelen met DISTINCT of GROUP BY...

Verwijderd

Wat je zou kunnen doen ( en ik praat hier over standaard SQL, weet niet of het ook in MySQL kan ) is

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(
SELECT 
  voorletters, tussenvoegsel, achternaam, email 
FROM 
  mailinglist 
) 
UNION
(
SELECT 
  voorletters, tussenvoegsel, achternaam, email 
FROM 
  user 
WHERE 
  mailinglist = 1 AND 
  email not in 
        (SELECT 
          email 
        FROM 
          mailinglist)
)


DIt zou je alle adressen uit Mailinglist moeten geven, en al de adressen uit user die niet in mailinglist voorkomen.

  • JQR
  • Registratie: Augustus 2001
  • Laatst online: 30-04 11:43

JQR

de nieuwere versies van mysql ondersteunen ook subselects, dus grote kans dat iets dergelijks wel gaat werken. in oudere versies kan dit helaas niet. je zult er dan een scriptje omheen moeten schrijven..

Verwijderd

JQR schreef op zaterdag 11 juni 2005 @ 18:15:
de nieuwere versies van mysql ondersteunen ook subselects, dus grote kans dat iets dergelijks wel gaat werken. in oudere versies kan dit helaas niet. je zult er dan een scriptje omheen moeten schrijven..
Ikzelf gebruik meestal MSSQL of Oracle, maar ik had wel eens gehoord dat MySQL pas sinds kort subselects ondersteund. Volgens mij kun je het ook simuleren door eerst een view met een outer join te maken op beide tabellen, en dan die view later gebruiken voor je union. In MSSQL :

code:
1
2
3
4
5
6
7
CREATE VIEW User_Mailing_Joined AS
(Select 
  user.voorletters, user.tussenvoegsel, user.achternaam, user.email ,mailinglist.email as mailing_email, mailinglist.mailinglist
FROM
  user,mailinglist
WHERE
  user.email *= mailinglist.email)


uiteindelijke select wordt dan
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(
Select 
  voorletters, tussenvoegsel, achternaam, email
FROM
  mailinglist)
UNION
(
Select 
  voorletters, tussenvoegsel, achternaam, email
FROM
  User_Mailing_Joined
WHERE
  Mailing_Email IS NULL AND
  Mailinglist = 1
)


Let wel dat ik dit hier uit mijn blote hoofd zit te tikken, dus er kunnen makkelijk nog wat fouten in zitten.

  • bRight
  • Registratie: Juli 2000
  • Laatst online: 27-11-2024

bRight

digitaal

Topicstarter
Tnx! :)

Met de NOT IN constructie van FFrenzy lukte het al.
Pagina: 1