BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Firebird, Viele-zu-Viele Beziehung, Parameter Abfrage

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
malt14
Beiträge: 119
Registriert: Fr 7. Nov 2014, 06:21

Firebird, Viele-zu-Viele Beziehung, Parameter Abfrage

Beitrag von malt14 » So 28. Mai 2023, 20:04

Guten Tag,

in einer LibreOffice Firebird Datenbank habe ich diese Tabelle:

Code: Alles auswählen

SELECT "itemID", "topicID" FROM "relItemTopic"
Daten:
itemID topicID topicName
1 1 one
1 2 two
1 3 three
1 4 four
1 5 five
2 1 one
3 1 one
4 2 two
5 4 four
6 1 one
6 2 two
6 3 three
6 4 four
6 5 five
6 6 six

Mit der Abfrage

Code: Alles auswählen

SELECT "relItemTopic"."itemID"
FROM "relItemTopic"
INNER JOIN "topic" ON "relItemTopic"."topicID" = "topic"."ID"
WHERE "topic"."name" IN ('one', 'five')
GROUP BY "relItemTopic"."itemID"
HAVING COUNT(DISTINCT "topic"."name") = 2
kann ich nach Datensätzen suchen, welche zwei bestimmte "topic"."name" für "itemID" enthalten.
Für noch mehr "topic"."name":

Code: Alles auswählen

SELECT "relItemTopic"."itemID"
FROM "relItemTopic"
INNER JOIN "topic" ON "relItemTopic"."topicID" = "topic"."ID"
WHERE "topic"."name" IN ('one', 'two', 'three', 'four', 'six')
GROUP BY "relItemTopic"."itemID"
HAVING COUNT(DISTINCT "topic"."name") = 5
Kann man dazu auch Parameter Abfragen oder Filter in Formularen benutzen? Das wäre einfacher auszuführen.

Diese Abfrage funktioniert nicht:

Code: Alles auswählen

SELECT "relItemTopic"."itemID", "topic"."name" 
FROM "relItemTopic" 
INNER JOIN "topic" ON "relItemTopic"."topicID" = "topic"."ID" 
WHERE 
( LOWER ( "topic"."name" ) LIKE '%' || LOWER ( :name1 ) || '%' OR CAST( :name1 AS VARCHAR ( 150 ) ) IS NULL )
 AND 
( LOWER ( "topic"."name" ) LIKE '%' || LOWER ( :name2 ) || '%' OR CAST( :name2 AS VARCHAR ( 150 ) ) IS NULL )
leere Parameter: alle Datensätze
nur "name1": korrekte Datensätze
verschiedene eingaben in"name1" und "name2": keine Datensätze

Grüße
Malt

Version: 7.5.2.2 (X86_64) /
OS: Windows 10.0 Build 22621

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten