MySQL Kombinierte WEHRE Selektabfrage mit mehrere AND / OR

schulzh59

Benutzer
Beiträge
5
Hallo,
ich habe eine Datenbank mit einer Buchungstabelle.
Diese enthält wiederkehrende, aber auch einmalige Buchungen, über ein Zeitraum von mehreren Jahren.
Die relevanten Tabellenspalten meiner Buchungstabelle sind:

Buchungsdatum
Buchungstext
Verwendungszweck


Jede Seleketabfage in Kombination
WEHRE Buchungsdatum … AND Buchungstext, bzw.
WEHRE Buchungsdatum … AND Verwendungszweck,
aber auch einzelne Abfragen ohne AND bzw. OR
machen keine Probleme.

Mein Problem:
eine Abfrage

1. Suche nach Buchungsdatum (Jahr)
2. innerhalb Buchungsdatum eine Textsuche in den Spalten Verwendungszweck oder Buchungstext.

Der zu suchende Text kann nur in einer Spalte vorkommen, also eine OR - Verbindung.

Eine Abfrage mit
WEHRE (Datum)
AND WEHRE Buchungstext (Text)
OR Verwendungszweck (Text)
funzt nicht. Aber wie komme ich zum ein Ergebnis?​
 
Werbung:
Code:
postgres=# create table schulzh59(buchungsdatum date, verwendungszweck text, buchungstext text);
CREATE TABLE
postgres=# select * from schulzh59 where buchungsdatum between '2020-01-01' and '2021-01-01' and (verwendungszweck = 'foo' or buchungstext = 'foo');
 buchungsdatum | verwendungszweck | buchungstext 
---------------+------------------+--------------
(0 rows)

postgres=#
 
Code:
postgres=# create table schulzh59(buchungsdatum date, verwendungszweck text, buchungstext text);
CREATE TABLE
postgres=# select * from schulzh59 where buchungsdatum between '2020-01-01' and '2021-01-01' and (verwendungszweck = 'foo' or buchungstext = 'foo');
 buchungsdatum | verwendungszweck | buchungstext
---------------+------------------+--------------
(0 rows)

postgres=#
Hi Andreas,

du solltest den 2020-12-31 beim between nehmen, sonst hast du nen Tag zuviel

SELECT * FROM (
SELECT 1 as id
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
) AS mytab
WHERE id BETWEEN 1 AND 4;

1
2
3
4

Gruß Bernd
 
Danke, hast Recht. Ich biete noch ein

Code:
postgres=# select * from schulzh59 where buchungsdatum <@ ('[2020-01-01,2021-01-01)')::daterange and (verwendungszweck = 'foo' or buchungstext = 'foo');
 buchungsdatum | verwendungszweck | buchungstext 
---------------+------------------+--------------
(0 rows)

zur Vervollständigung der Verwirrung.
 
Werbung:
Hallo, ist erledigt,
Danke an alle.
Lösung:
Code:
SELECT * FROM tb_buchungen
    Where YEAR(Bu_stag)='2023'
    AND
        (
            `Bu_gstext` LIKE '%Rente%'
            or
            `Verwend_zweck` LIKE '%Rente%'
        )
ORDER BY `Bu_stag`, `buc_nr`;
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben