🙏 Bitte helfen Sie uns das LibreOffice Forum zu erhalten. 🙏
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.

🍀 Wir hoffen auf Ihre Unterstützung - vielen Dank!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 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: 125
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 gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten