2008-04-18, 15:27
#1
CREATE TABLE fordon (
id SERIAL NOT NULL PRIMARY KEY,
namn VARCHAR(50) NOT NULL,
hjul INT NOT NULL
);
CREATE TABLE forare (
id SERIAL NOT NULL PRIMARY KEY,
namn VARCHAR(50) NOT NULL
);
CREATE TABLE forare_fordon (
forare_id INT NOT NULL,
fordon_id INT NOT NULL,
FOREIGN KEY(forare_id) REFERENCES forare(id),
FOREIGN KEY(fordon_id) REFERENCES fordon(id)
);
INSERT INTO fordon (namn, hjul) VALUES ('Volvo', 5);
INSERT INTO fordon (namn, hjul) VALUES ('SAAB', 3);
INSERT INTO fordon (namn, hjul) VALUES ('Moppe', 2);
INSERT INTO forare (namn) VALUES ('Åke Svensson');
INSERT INTO forare (namn) VALUES ('Nisse Persson');
INSERT INTO forare (namn) VALUES ('Nisse Persson');
INSERT INTO forare_fordon VALUES (1, 1);
INSERT INTO forare_fordon VALUES (2, 1);
INSERT INTO forare_fordon VALUES (2, 2);
INSERT INTO forare_fordon VALUES (2, 3);
CREATE AGGREGATE array_accum (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
);
SELECT
forare.id,
max(forare.namn), -- hax
array_accum(fordon.namn)
FROM
forare
LEFT JOIN
forare_fordon AS ff ON forare.id = ff.forare_id
LEFT JOIN
fordon ON ff.fordon_id = fordon.id
GROUP BY
forare.id;
id | max | array_accum
----+---------------+--------------------
1 | Åke Svensson | {Volvo}
3 | Nisse Persson | {NULL}
2 | Nisse Persson | {Volvo,SAAB,Moppe}
(3 rows)
Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!
Swish: 123 536 99 96 Bankgiro: 211-4106
Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!
Swish: 123 536 99 96 Bankgiro: 211-4106