Avatar billede betting Nybegynder
18. august 2003 - 12:00 Der er 14 kommentarer og
1 løsning

Min SQL virker ikke, når jeg søger efter dem der starter med B

Min SQL sætning virker ikke mere.

Denne SQL virker:
SELECT First(t_kunder.knr) AS FørsteOfknr, t_kunder.fornavn, t_kunder.efternavn, t_kunder.adresse, t_kunder.postnr, t_kunder.town, t_kunder.cpr, t_kunder.konsulent, t_ejendomme.ks_navn, t_investeringer.ks, t_investeringer.ind, t_investeringer.kategori FROM t_kunder left JOIN (t_ejendomme right JOIN t_investeringer ON t_ejendomme.ejendom_id = t_investeringer.ks) ON t_kunder.knr = t_investeringer.knr GROUP BY t_kunder.fornavn, t_kunder.efternavn, t_kunder.adresse, t_kunder.postnr, t_kunder.town, t_kunder.cpr, t_kunder.konsulent, t_ejendomme.ks_navn, t_investeringer.ks, t_investeringer.ind, t_investeringer.inaktiv, t_investeringer.kategori HAVING (((t_kunder.efternavn) Like '%bet%') ) ORDER BY t_kunder.fornavn;

Skriver jeg noget der er under 3 karakter lang i mit søge felt virker den ikke mere

Denne sql virker ikke:

SELECT First(t_kunder.knr) AS FørsteOfknr, t_kunder.fornavn, t_kunder.efternavn, t_kunder.adresse, t_kunder.postnr, t_kunder.town, t_kunder.cpr, t_kunder.konsulent, t_ejendomme.ks_navn, t_investeringer.ks, t_investeringer.ind, t_investeringer.kategori FROM t_kunder left JOIN (t_ejendomme right JOIN t_investeringer ON t_ejendomme.ejendom_id = t_investeringer.ks) ON t_kunder.knr = t_investeringer.knr GROUP BY t_kunder.fornavn, t_kunder.efternavn, t_kunder.adresse, t_kunder.postnr, t_kunder.town, t_kunder.cpr, t_kunder.konsulent, t_ejendomme.ks_navn, t_investeringer.ks, t_investeringer.ind, t_investeringer.inaktiv, t_investeringer.kategori HAVING (((t_kunder.efternavn) Like '%b%') ) ORDER BY t_kunder.fornavn;

Jeg har prøvet at erstatte % med * - men det ændre ikke noget.

Det mystiske er at det har virket før - men ikke nu!

Har du et forslag til hvad jeg gør galt høre jeg gerne fra dig så hurtigt som muligt.

Med venlig hilsen
Camilla Betting
Avatar billede Jørgen Kirkegaard Professor
18. august 2003 - 12:14 #1
I overskriften skriver du "starter med b", jamen så er det
Like "b*" du skal bruge. Bemærk, at jeg bruger dobbelt-quotes - det er muligt, at det også har betydning.
Avatar billede hugopedersen Nybegynder
18. august 2003 - 12:25 #2
Som staticdata skriver så skal du bruge dobbelt-plinger og hvis du vil finde det der begynder med b skal det være  Like "b*" Access bruger * som wildcard % er hvis der er tale om en SQL db som backend.

Men du skriver 'Skriver jeg noget der er under 3 karakter lang i mit søge felt virker den ikke mere'  Hvad er der for et søgefelt du refererer til her ?
Avatar billede Jørgen Kirkegaard Professor
18. august 2003 - 12:27 #3
Hugo: Det må være det felt, der søges på, altså 't_kunder.efternavn'
Avatar billede betting Nybegynder
18. august 2003 - 12:38 #4
Jeg har prøvet at skrive like "b*" i min acces forespørgsel men jeg får fejlmedelsen "Ingen aktuelle poster" selvom jeg ved at der er poster.

Før virkede min sql sådan at man fik alle ud der både startede med b i efternavnet og dem som havde b i sit efternavn.
Avatar billede Jørgen Kirkegaard Professor
18. august 2003 - 12:43 #5
Prøv at slette søgekriteriet og se, om der kommer rækker ud. Fejlen KAN være en anden.
Avatar billede betting Nybegynder
18. august 2003 - 14:26 #6
Du fik mig på rette spor "staticdata". Jeg fandt ud af at det har noget med den "group By" jeg foretager at gøre. Jeg kan dog ikke se hvad der er galt???
Avatar billede Jørgen Kirkegaard Professor
18. august 2003 - 15:35 #7
Undskyld, men du har fået svar på dit spørgsmål, og må næsten lukke denne og efterfølgende formulere et nyt. Der kan være meget i vejen, når der joines og right joines etc. Jeg hopper af denne her...
Avatar billede terry Ekspert
18. august 2003 - 15:39 #8
betting>if it doesnt work then how do you know your on the right track? and as far as I can see it has nothing to do with GROUP BY!

If staticdata doesnt want to continue then you can send the dB to eksperten@santhell.dk and I will take a look
Avatar billede Jørgen Kirkegaard Professor
18. august 2003 - 15:46 #9
Det oprindelige spørgsmål drejede sig om søgning vha. 'like' - dette spørgsmål er afklaret, men afledte et nyt spørgsmål. Så synes jeg, at det oprindelige bør lukkes og et nyt må oprettes, men fortsæt I bare her...
Avatar billede terry Ekspert
18. august 2003 - 20:22 #10
This SQL works! The problem seems to occur when you use an OUTER JOIN on t_kunder and t_investeringer. I'm a little puzzled as to why you use OUTER JOINS! t_investeringer is the link table of a many to many relationship between t_kunder and t_ejendomme. So you cant have records in t_investeringer WITHOUT there being related records in the other two tables. So as far as I see it you can use an INNER JOIN! But then maybe I am missing something!
Avatar billede terry Ekspert
18. august 2003 - 20:23 #11
Oh yes, the SQL :o)

SELECT t_kunder.knr, t_kunder.fornavn, t_kunder.efternavn, t_kunder.adresse, t_kunder.postnr, t_kunder.town, t_kunder.cpr, t_kunder.konsulent, t_ejendomme.ks_navn, t_investeringer.ks, t_investeringer.ind, t_investeringer.kategori, t_investeringer.inaktiv
FROM t_ejendomme INNER JOIN (t_kunder INNER JOIN t_investeringer ON t_kunder.knr = t_investeringer.knr) ON t_ejendomme.ejendom_id = t_investeringer.ks
GROUP BY t_kunder.knr, t_kunder.fornavn, t_kunder.efternavn, t_kunder.adresse, t_kunder.postnr, t_kunder.town, t_kunder.cpr, t_kunder.konsulent, t_ejendomme.ks_navn, t_investeringer.ks, t_investeringer.ind, t_investeringer.kategori, t_investeringer.inaktiv
HAVING (((t_kunder.efternavn) Like '*b*'));
Avatar billede betting Nybegynder
19. august 2003 - 09:40 #12
Answer to Terry

It is correct that there need to be a related records in t_kunder an in t_ejendomme before there can bee a record in t_investeringer - You cant have an investment (t_investeringer) before you are a costumer (t_kunder) and you can't have an investment before there is something to invest in (t_ejendomme).

So that is why I use an outer joins. The problem with your sql is what I get each customer several times and I just want each customer once.

How can I solve this problem within your sql?
Avatar billede terry Ekspert
19. august 2003 - 10:22 #13
Still dont see why you need OUTER JOINS! An INNER JOIN will only give you records where there are related records in the other tables. If there are NO related records in t_investeringer then what is the point in trying to show them?
You get each customer several times BECAUSE they have made one or more investments on one or more buildings.

Lets say you have ONE building and there has been made TWO investments, JOINing the two tables will show TWO records, on for each investment. If you only want to see ONE then you can GROUP on Building and show firstOf investment, This applies to customer too.
Avatar billede terry Ekspert
19. august 2003 - 10:28 #14
If you want to see information on a customer and only the first investment then you group on customer and show first investment. If MUST show the customer even thoughthey have made no investments then first make a query JOINing investments+building then include this in ýour query instead if the two tables.
Avatar billede betting Nybegynder
20. august 2003 - 11:57 #15
Jeg erstatede Outer Joins med Inner Joins og så virkede det - tak til Terry.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester