Dag mede codekloppers.
voor mijn stage-opdracht zit ik met het volgende:
Ik heb een db gekregen die bestaat uit 3 tabellen met verschillende klant gegevens.
Deze tabellen bestaan voor het grootste gedeelte uit varchar velden die in de loop der tijd door de gebruikers zijn ingevuld.
Het nadeel hieraan is dat het dus ook wel eens foutief word ingevuld, bijvoorbeeld een e-mail adres staat in het veld voor het klantnummer.
een paar voorbeeld regels van de tabel: (normaal bevat hij iets van 30 kolommen)
Nu is het de bedoeling dat ik een lijst krijg met alle unieke e-mail adressen die in de verschillende tabellen/kolommen staan.
bijvoorbeeld:
Nu heb ik zelf zo iets bedacht:
Aan deze oplossing kleven 2 nadelen.
Ten eerste moet ik alle kolommen/tabellen gaan benoemen. en dat zijn er nogal wat.
ten 2e krijg ik natuurlijk nu maar per record in de table 1 maal een e-mail adres terug. bijv:
Mocht je een geniaal idee hebben, roept u maar.
[edit]
oplossing:
voor mijn stage-opdracht zit ik met het volgende:
Ik heb een db gekregen die bestaat uit 3 tabellen met verschillende klant gegevens.
Deze tabellen bestaan voor het grootste gedeelte uit varchar velden die in de loop der tijd door de gebruikers zijn ingevuld.
Het nadeel hieraan is dat het dus ook wel eens foutief word ingevuld, bijvoorbeeld een e-mail adres staat in het veld voor het klantnummer.
een paar voorbeeld regels van de tabel: (normaal bevat hij iets van 30 kolommen)
code:
1
2
3
4
| tabel1 kolom1 kolom2 kolom3 kolom4 kolom5 1 bedrijf info@bedrijf.nl jan@bedrijf.nl Langeweg 21 2 client jan@hetnet.nl C28632 onbekend |
Nu is het de bedoeling dat ik een lijst krijg met alle unieke e-mail adressen die in de verschillende tabellen/kolommen staan.
bijvoorbeeld:
code:
1
2
3
4
| email info@bedrijf.nl jan@bedrijf.nl jan@hetnet.nl |
Nu heb ik zelf zo iets bedacht:
SQL:
1
2
3
4
5
6
7
8
9
10
11
| select (Case when kolom1 like '%@%' then Kolom1 else (Case when kolom2 like '%@%' then kolom2 else (Case when kolom3 like '%@%' then kolom3 else null end) end) end) as email from tabel1 |
Aan deze oplossing kleven 2 nadelen.
Ten eerste moet ik alle kolommen/tabellen gaan benoemen. en dat zijn er nogal wat.
ten 2e krijg ik natuurlijk nu maar per record in de table 1 maal een e-mail adres terug. bijv:
code:
1
2
3
| email info@bedrijf.nl jan@hetnet.nl |
Mocht je een geniaal idee hebben, roept u maar.
[edit]
oplossing:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| select distinct email from ( (select kolom1 as email from tabel1 where kolom1 like '%@%.%') union all (select kolom2 as email from tabel1 where kolom2 like '%@%.%') union all (select kolom1 as email from tabel2 where kolom1 like '%@%.%') union all (select kolom2 as email from tabel2 where kolom2 like '%@%.%') union all (select kolom3 as email from tabel2 where kolom3 like '%@%.%') union all (select kolom4 as email from tabel2 where kolom4 like '%@%.%') order by email asc ) as emaillist |
[ Voor 15% gewijzigd door Vincenz0 op 03-03-2009 14:46 ]
Coding 4 Fun!