I don't know if this will do exactly what you want at the edges, but you
can use subqueries in a straightforward way:
SELECT es.identifier, es.entities, ks.keywords
FROM
(SELECT b.identifier AS identifier,
GROUP_CONCAT( e.entity, '; ' ) AS entities
FROM bibliographics AS b
LEFT JOIN entities AS e ON e.identifier IS b.identifier
GROUP BY b.identifier) AS es
JOIN (
SELECT b.identifier as identifier,
GROUP_CONCAT( k.keyword, '; ' ) AS keywords
FROM bibliographics AS b
LEFT JOIN keywords AS k ON k.identifier IS b.identifier
GROUP BY b.identifier) AS ks on es.identifier = ks.identifier;
On 10/29/21 9:46 AM, Eric Lease Morgan wrote:
How do I join multiple tables in an SQLite database in order to output the
values in the linked tables?
I have a database with the following structure:
create table bibliographics (
identifier TEXT PRIMARY KEY,
title TEXT
);
create table keywords (
identifier TEXT,
keyword TEXT
);
create table entities (
identifier TEXT,
entity TEXT
);
I want output looking like this:
identifier = homer
keywords = love; honor; truth; justice;
entities = jove; troy; helen; son; ship
Here is my SQL query:
SELECT b.identifier,
GROUP_CONCAT( e.entity, '; ' ) AS entities,
GROUP_CONCAT( k.keyword, '; ' ) AS keywords
FROM bibliographics AS b
LEFT JOIN entities AS e ON e.identifier IS b.identifier
LEFT JOIN keywords AS k ON k.identifier IS e.identifier
GROUP BY b.identifier
Unfortunately, my output is looking much like this:
identifier = homer
keywords = love; honor; truth; justice;
entities = jove; troy; helen; son; ship; jove; troy; helen; son; ship;
jove; troy; helen; son; ship; jove; troy; helen; son; ship; jove; troy; helen;
son; ship; jove; troy; helen; son; ship;
What am I doing wrong?
--
Eric Morgan