[SQL] overzichten problemen

Pagina: 1
Acties:

  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
ok ik heb al eerder een topic geopend met een soortgelijke vraag
maar nu gaat deze vraag verder op het antwoord van toen
heb hier 2 vragen gesteld :):

VRAAG 1:

toen had ik dit verhaal (of kijk hier: \[PHP/SQL] WHERE NOT EXISTS instructie)
nu is het de bedoeling dat ik een overzichtje maak van uitkeringen
deze uitkeringen hebben een gsm nummer.
daarnaast betstaat er een tabel met abonnementen en deze abonnementen hebben ook een gsm nummer
nu is het de bedoeling dat uitkeringen gekoppeld wordt dmv het abonnement id in de tabel uitkering
dit werkt goed maar nu kan het wel eens voorkomen dat een uitkering een foutief gsm nummer bevat
dit mag natuurlijk niet voorkomen en moet dus gecorrigeerd kunnen worden
vandaar dat er dus een overzicht moet komen van uitkeringen met de gsm-nummers EN dit nummer komt NIET voor in de tabel abonnement

de juiste querie hiervoor is (zonder subqueries want dat werkt bij mij niet vanwege de versie)
SQL:
1
2
3
SELECT * 
FROM uitkereing U 
LEFT OUTER JOIN Abonnement A ON U.gms = A.gsm WHERE A,gsm IS NULL


nu is alleen het volgende van toepassing:
naast dat de GSM-nummer van de uitkering wordt vergeleken met het GSM-nummer van het abonnement
moet het ook worden vergeleken als het niet voorkomt met het Tijdelijk-nummer van het abonnement
ik heb nu deze query gemaakt met behulp van dit topic:
[SQL] Meedere LEFT JOINS
SQL:
1
2
3
4
5
6
7
SELECT u.uitkering_gsm_nr, u.uitkering_abonnement_vorm, u.uitkering_debiteur_naam, u.uitkering_uitgekeerde_bonus
FROM 
((uitkering u 
LEFT OUTER JOIN abonnement a 
ON u.uitkering_gsm_nr = a.abonnement_gsm_nr WHERE a.abonnement_gsm_nr IS NULL)
LEFT OUTER JOIN abonnement a 
ON u.uitkering_gsm_nr = a.abonnement_tijdelijk_nr WHERE a.abonnement_tijdelijk_nr IS NULL)

ik heb nu als test data een NIET voorkomende uitkering aangemaakt en hoop dus deze in mijn overzicht terug te kunnen vinden
maar helaas zonder resultaat tot dusver..

VRAAG 2:
het kan zijn dat een gsm-nummer van een abonnement 2 x voorkomt. dit is dan meestal het geval als er 1 abonnement een "Voice" betreft en de andere een "Data".
en het kan dus dan ook zo voorkomen dat er dus dan 2 x een uitkering komt met beide eenzelfde gsm-nummer maar een andere uitkering en abonnementsvorm.

in dit geval heb ik deze query:
SQL:
1
2
3
4
5
SELECT 
a.abonnement_id, u.uitkering_gsm_nr, u.uitkering_abonnement_vorm, u.uitkering_debiteur_naam, u.uitkering_uitgekeerde_bonus
FROM uitkering u, abonnement a
WHERE u.uitkering_abonnement_id = 0
AND u.uitkering_gsm_nr = a.abonnement_gsm_nr

als duidelijkheid probeer ik ff de testgegevens uit te leggen:
Abonnement 1Abonnement 2
gsm 0612-345672 gsm 0612-345672
type abonnement voicetype abonnement data

Uitkering 1Uitkering 2
gsm 0612-345672 gsm 0612-345672
type abonnement voicetype abonnement data

dit is het resultaat:
Afbeeldingslocatie: http://home.aim.avans.nl/aaloon/files/vraag.JPG
wat je dus nu ziet is dat hij voor elke uitkering_gsm_nr gaat zoeken in de tabel abonnementen
hij vind voor het eerste uitkering dus 2 abonnementen
dan bij de 2de uitkering vind hij vervolgens weer 2 abonnementen

NADEEL:
ik kan geen koppeling leggen met de abonnementsvormen omtrend de "voice" of "data" wat dus een nadeel is..

met de knop achter de result is een link naar een volgende pagina waar de uitkering vervolgens gekoppeld kan worden aan het abonnement
in deze link zit dus ook het abonnement_id aan vast
de bovenste 2 zijn voor abonnement_id = 1 en de 2 eronder voor abonnement_id = 4

vraag is kan dit anders of niet? :?

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Antwoord 1:

SQL:
1
2
3
4
5
SELECT * 
FROM uitkering U 
LEFT OUTER JOIN Abonnement A ON U.gms = A.gsm 
LEFT OUTER JOIN Abonnement A_Tijdelijk ON U.gsm = A_Tijdelijk.tijdelijk_GSM
WHERE A.gsm IS NULL AND A_Tijdelijk.tijdelijk_GSM IS NULL

Dit toont uitkeringen waarvan zowel geen GSM nr's bestaat EN geen tijdelijk gsm nr.


Je 2e vraag snap ik niet helemaal. Wat wil je precies? De dubbele resultaten elimineren? Kijk eens naar DISTINCT en/of GROUP BY.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Tijgertje84
  • Registratie: Augustus 2005
  • Laatst online: 04-06-2025
P_de_B schreef op vrijdag 18 augustus 2006 @ 10:27:
Antwoord 1:

SQL:
1
2
3
4
5
SELECT * 
FROM uitkering U 
LEFT OUTER JOIN Abonnement A ON U.gms = A.gsm 
LEFT OUTER JOIN Abonnement A_Tijdelijk ON U.gsm = A_Tijdelijk.tijdelijk_GSM
WHERE A.gsm IS NULL AND A_Tijdelijk.tijdelijk_GSM IS NULL

Dit toont uitkeringen waarvan zowel geen GSM nr's bestaat EN geen tijdelijk gsm nr.
hmm heb er nog niet eens zover naast gezeten want had eerder ook zon constructie.. anyway
het klopt nog niet helemaal
ik krijg nu inderdaad mijn foute uitkering terug MAAR ook een uitkering met dit nummer 0643-822711
terwijl dit nummer WEL voorkomt in de tabel abonnement als tijdelijk_nr..
mss dat er nog iets verkeerd zit in query
ik heb er nu dit van gemaakt:
SQL:
1
2
3
4
5
6
7
8
SELECT u.uitkering_gsm_nr, u.uitkering_abonnement_vorm, u.uitkering_debiteur_naam, u.uitkering_uitgekeerde_bonus
FROM 
uitkering u 
LEFT OUTER JOIN abonnement a   
ON u.uitkering_gsm_nr = a.abonnement_gsm_nr
LEFT OUTER JOIN abonnement abonnement_tijdelijk_nr  
ON u.uitkering_gsm_nr = a.abonnement_tijdelijk_nr 
WHERE a.abonnement_gsm_nr IS NULL AND a.abonnement_tijdelijk_nr IS NULL
Je 2e vraag snap ik niet helemaal. Wat wil je precies? De dubbele resultaten elimineren? Kijk eens naar DISTINCT en/of GROUP BY.
op vraag 2 heb ik DISTINCT al geprobeerd zonder resultaat
ik zal nu even group by testen
en tjah het is lastig :P maar denk dat ik hier niets aan kan veranderen
want elimineren is geen optie want dan zouden in dat geval de "geelimineerde" uitkeringen niet meer gekoppeld worden aan een abonnement. wat dus uiteraard niet de bedoeling is. :)


EDIT
vraag 1 opgelost
had je code ff verkeerd gelezen
het werkt nu had een fout gemaakt met
SQL:
1
2
3
4
5
6
7
LEFT OUTER JOIN abonnement abonnement_tijdelijk_nr  
ON u.uitkering_gsm_nr = a.abonnement_tijdelijk_nr 

//ipv

LEFT OUTER JOIN abonnement a_tijdelijk_nr 
ON u.uitkering_gsm_nr = a_tijdelijk_nr.abonnement_tijdelijk_nr 

[ Voor 9% gewijzigd door Tijgertje84 op 18-08-2006 10:51 ]

Intel© Conroe E6600 | Asus P5Q PRO Turbo | Sapphire Vapor-X HD5770 1GB | G.E.I.L. 2 GB DDR2-667 Kit CL4 4-4-12 | WD Caviar SE16 2x250GB (S-ATA2) (Raid0) | Sunbeam Trio | Chaintec CFT-500A | Windows XP Pro SP3 | Samsung Syncmaster S23A350H


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
ok dan :)

[ Voor 97% gewijzigd door P_de_B op 18-08-2006 10:53 ]

Oops! Google Chrome could not find www.rijks%20museum.nl