Ich habe eine Haupttabelle mit der Bezeichnung Lieferungen und eine Beziehung zwischen eins und vielen mit delivery_languages als dl, deliveries_markets dm und deliveries_tags dt mit delivery_id als Fremdschlüssel. Diese 3 Tabellen stehen jeweils eins zu eins mit Sprachen, Märkten und Tags. Zusätzlich haben Lieferungen, Tabelle eine Eins-zu-eins-Beziehung zu Unternehmen und haben company_is als Fremdschlüssel. Es folgt eine Abfrage, die ich geschrieben habe:Abrufen bestimmter Zeilen aus mehreren Joins SQL
SELECT deliveries.*, languages.display_name, markets.default_name, tags.default_name, companies.name
FROM deliveries
JOIN deliveries_languages dl ON dl.delivery_id = deliveries.id
JOIN deliveries_markets dm ON dm.delivery_id = deliveries.id
JOIN deliveries_tags dt ON dt.delivery_id = deliveries.id
JOIN languages ON languages.id = dl.language_id
JOIN markets ON markets.id = dm.market_id
JOIN tags ON tags.id = dt.tag_id
JOIN companies ON companies.id = deliveries.company_id
WHERE
deliveries.name ILIKE '%new%' AND
deliveries.created_by = '5f331347-fb58-4f63-bcf0-702f132f97c5' AND
deliveries.deleted_at IS NULL
LIMIT 10
Hier bin ich immer redundante delivery_ids weil für jede delivery_id gibt es mehrere Sprachen, Märkte und Tags. Ich möchte limit für verschiedene delivery_ids verwenden. Also, Limit 10 sollte mir nicht 10 Datensätze von oben Join-Abfrage aber 10 Datensätze geben, wo es eine eindeutige delivery_id (deliveries.id) gibt. Ich kann wahrscheinlich abgeleitetes Tabellenkonzept hier verwenden, aber ich bin nicht sicher, wie ich das tun kann. Kann mir bitte jemand helfen, dieses Problem zu lösen.
Welche DBMS verwenden Sie? – jarlh
Wie wählt man diese 10 Zeilen pro Zustellungs-ID aus? (Mehrere Sprachen zu behalten, scheint etwas merkwürdig.) – jarlh
Ich benutze postgreSQL –