18. august 2003 - 12:00Der 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.
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.
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 ?
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???
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...
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...
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!
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.
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.
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.
Jeg erstatede Outer Joins med Inner Joins og så virkede det - tak til Terry.
Synes godt om
Ny brugerNybegynder
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.