[SQL] Like gebruiken, maar zoekterm bevat tabelveld

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dag,

Ik heb een probleempje waarvan ik hoop dat jullie me kunnen helpen. Ik dacht dat het simpel was, maar helaas blijkt het niet zo simpel als ik dacht. Ik wil het volgende:

Ik heb een tabel met factuurgegevens (Facturen), waarin factuurnummers staan. Ook heb ik een tabel met bankgegevens (Triodos), in het commentaarveld (Commentaar) van deze tabel komen sommige van die factuurnummers als het goed is ook voor. Nu wil ik een tabel genereren waarin de records staan met factuurnummers die in beide tabellen voorkomen.

Dus de tabel Facturen heeft velden Factuurnummer, Omschrijving, etc..
En de tabel Triodos heeft velden Commentaar, datum etc..


Op zich had ik een werkende query, ware het niet dat ik wil dat het commentaar uit de bankgegevens niet precies het factuurnummer hoeft te bevatten, maar bijvoorbeeld ook "Factuurnummer: 1234" mag zijn, waarbij 1234 dus het factuurnummer is. Dat factuurnummer staat dan dus in de tabel Facturen.

De originele query was als volgt:

SQL:
1
2
3
4
SELECT "Facturen"."Factuurnummer", "Facturen"."Bedrag", SUM( "Triodos"."Bedrag" ) AS "Voldaan" 
FROM "Triodos", "Facturen" 
WHERE "Triodos"."Commentaar" = "Facturen"."Factuurnummer" 
GROUP BY "Facturen"."Factuurnummer", "Facturen"."Bedrag"


Dat werkte natuurlijk wel.. Maar dan werkt het alleen als het veld commentaar precies het factuurnummer bevat.

Naar aanleiding van dit topic heb ik de like statement toegevoegd zoals hieronder. Het blijkt echter niet te werken.. En Google weet het ook niet.. Ik gebruik OpenOffice.Org Base..

SQL:
1
2
3
4
SELECT "Facturen"."Factuurnummer", "Facturen"."Bedrag", SUM( "Triodos"."Bedrag" ) AS "Voldaan" 
FROM "Triodos", "Facturen" 
WHERE "Triodos"."Commentaar" LIKE CONCAT( '%', "Facturen"."Factuurnummer", '%' ) 
GROUP BY "Facturen"."Factuurnummer", "Facturen"."Bedrag"


Diegene die mij kan helpen: eeuwige dank!

[ Voor 33% gewijzigd door Verwijderd op 19-02-2010 18:44 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verwijderd schreef op vrijdag 19 februari 2010 @ 18:25:
Het blijkt echter niet te werken..
Maar wat gebeurd er dan wel?... Het lijkt mij bijvoorbeeld dat concat() wel eens niet zo kan bestaan in Base, en dat je || ertussen moet gebruiken. :)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • RikTW
  • Registratie: Januari 2004
  • Laatst online: 13:23
Zou je kunnen proberen om achter
SELECT "Facturen"."Factuurnummer"
een variabele naam te zetten, en deze te gebruiken verderop in de query? Dus bijvoorbeeld:
SQL:
1
2
3
4
SELECT "Facturen"."Factuurnummer" AS facNr, "Facturen"."Bedrag", SUM( "Triodos"."Bedrag" ) AS "Voldaan" 
FROM "Triodos", "Facturen" 
WHERE "Triodos"."Commentaar" LIKE CONCAT( '%', facNr, '%' ) 
GROUP BY "Facturen"."Factuurnummer", "Facturen"."Bedrag"


Ik weet niet zeker of dit helpt, maar wie weet.
Naar mijn mening is de relatie trouwens gewoon niet helemaal lekker gedefinieerd :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
pedorus schreef op vrijdag 19 februari 2010 @ 18:37:
[...]

Maar wat gebeurd er dan wel?... Het lijkt mij bijvoorbeeld dat concat() wel eens niet zo kan bestaan in Base, en dat je || ertussen moet gebruiken. :)
Je bent een HELD! Het werkt! Ik zit me hier al twee uur over te frustreren, dat het zo'n simpele oplossing is..!

Correct (in Base) (volgens de ANSI standaard [zie onder]) is dus:

SQL:
1
2
3
4
SELECT "Facturen"."Factuurnummer", "Facturen"."Bedrag", SUM( "Triodos"."Bedrag" ) AS "Voldaan" 
FROM "Triodos", "Facturen" 
WHERE "Triodos"."Commentaar" LIKE CONCAT( '%' || "Facturen"."Factuurnummer" || '%' ) 
GROUP BY "Facturen"."Factuurnummer", "Facturen"."Bedrag"

[ Voor 32% gewijzigd door Verwijderd op 19-02-2010 20:54 ]


Acties:
  • 0 Henk 'm!

  • Freeaqingme
  • Registratie: April 2006
  • Laatst online: 12:39
Dat is niet '(in base)', dat is 'volgens de ANSI SQL standaard' (waar toevallig mysql zich niet aan houdt).

No trees were harmed in creating this message. However, a large number of electrons were terribly inconvenienced.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Concat in Base accepteert blijkbaar maximaal 2 argumenten... Waarschijnlijk kan je query nog iets korter trouwens (concat weg).

[ Voor 7% gewijzigd door pedorus op 19-02-2010 19:31 ]

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
pedorus schreef op vrijdag 19 februari 2010 @ 19:29:
Concat in Base accepteert blijkbaar maximaal 2 argumenten... Waarschijnlijk kan je query nog iets korter trouwens (concat weg).
Ah, waarschijnlijk is dat waarom het de eerste keer fout ging, mijn query heeft er ook 3. En ik probeerde dat gewoon met CONCAT(bla, bla, bla). Naja, de oplossing is iig duidelijk :)
Pagina: 1