为 sql 中的三个表编写一个内连接查询
Write a inner join query for three tables in sql
我可以使用哪个查询使用 INNER JOIN 获取输出:
post_id、tag_id 来自 table posts_tags
来自 table 个标签的标题
标题来自 table 个帖子
post_id 来自 table posts_tags 在帖子 table 中有一个指向 id 的外键,并且 tag_id 来自 table posts_tags 在标签 table
中有一个指向 id 的外键
import.sql:
CREATE DATABASE foodblog;
USE foodblog;
CREATE TABLE `auteurs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`auteur` varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO `auteurs` (`id`, `auteur`) VALUES
(1, 'Mounir Toub'),
(2, 'Miljuschka'),
(3, 'Wim Ballieu');
CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`titel` varchar(255) DEFAULT NULL,
`datum` datetime DEFAULT current_timestamp(),
`img_url` varchar(255) DEFAULT NULL,
`inhoud` text DEFAULT NULL,
`auteur_id` int(11) DEFAULT NULL,
`likes` int(11) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO `posts` (`id`, `titel`, `datum`, `img_url`, `inhoud`, `auteur_id`, `likes`) VALUES
(1, 'Pindakaas', '2020-06-18 13:25:00', 'https://i.ibb.co/C0Lb7R1/pindakaas.jpg', 'Verwarm de oven voor op 180 °C. Verdeel de pinda’s over een met bakpapier beklede bakplaat en rooster in ca. 8 min. lichtbruin. Schep regelmatig om. Maal de warme pinda’s in de keukenmachine in 4 min. tot een grove, dikke pindakaas. Schep de rand van de kom regelmatig schoon met een spatel. Voeg het zout, de olie en honing toe en maal nog 1 min. tot een gladde pindakaas. Schep in een pot en sluit af.\r\n variatietip: Houd je van pindakaas met een smaakje? Voeg dan na de honing 1 el sambal badjak, 1 tl gemalen kaneel of 1 el fijngehakte pure chocolade toe. bewaartip: Je kunt de pindakaas 3 weken in de koelkast bewaren.', 1, 13),
(2, 'Baklava', '2020-03-11 10:28:00', 'https://i.ibb.co/ZWVRdPT/baklava.jpg', 'Voorbereiding\r\n\r\n Verwarm de oven voor op 190 °C. Vet de bakvorm in met roomboter.\r\n Smelt de roomboter in een pannetje. Snijd het baklavadeeg op dezelfde breedte als de bakvorm en bewaar het in een schone droge keukendoek om uitdrogen te voorkomen. Verwarm in een pan 300 gr honing met 20 ml oranjebloesemwater en houd dit mengsel warm. Roer in een mengkom de gezouten roomboter, 500 g gemalen walnoten, de rest van de honing en het oranjebloesemwater en de kaneel door elkaar. Verdeel het mengsel in zeven gelijke porties (van circa 90 g).\r\n\r\n Bereiding\r\n Bestrijk een vel baklavadeeg met gesmolten roomboter. Leg er een tweede vel op en bestrijk dat ook. Neem één portie van het walnotenmengsel en verdeel dat onderaan over het baklavadeeg. Rol op tot een staaf, leg deze in de bakvorm en bestrijk met gesmolten roomboter. Maak de rest van de staven op dezelfde manier.\r\n Snijd elke staaf met een scherp mes meteen in zessen. Bak de baklava in circa 25 minuten goudbruin en krokant in de oven.\r\n Neem de bakvorm uit de oven en verdeel de warme honing over de baklava. Garneer meteen met de rest van de fijngemalen walnoten. Laat de baklava minimaal 3 uur afkoelen voordat je ervan gaat genieten.', 3, 7);
CREATE TABLE `posts_tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`post_id` int(11) DEFAULT NULL,
`tag_id` int(11) DEFAULT NULL,
PRIMARY KEY (id)
);
CREATE TABLE `tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`titel` varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
);
ALTER TABLE `posts`
ADD KEY `auteur_id` (`auteur_id`);
--
-- Indexen voor tabel `posts_tags`
--
ALTER TABLE `posts_tags`
ADD KEY `post_id` (`post_id`),
ADD KEY `tag_id` (`tag_id`);
ALTER TABLE `posts`
ADD CONSTRAINT `posts_ibfk_1` FOREIGN KEY (`auteur_id`) REFERENCES `auteurs` (`id`);
ALTER TABLE `posts_tags`
ADD CONSTRAINT `posts_tags_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`),
ADD CONSTRAINT `posts_tags_ibfk_2` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`);
COMMIT;
正确且有效的查询是:
SELECT *, tags.titel AS 标签来自 posts_tags INNER JOIN 标签 ON posts_tags.post_id = tags.id INNER JOIN 帖子 ON posts.id = tags.id分组依据 posts.id;
我可以使用哪个查询使用 INNER JOIN 获取输出:
post_id、tag_id 来自 table posts_tags
来自 table 个标签的标题
标题来自 table 个帖子
post_id 来自 table posts_tags 在帖子 table 中有一个指向 id 的外键,并且 tag_id 来自 table posts_tags 在标签 table
中有一个指向 id 的外键import.sql:
CREATE DATABASE foodblog;
USE foodblog;
CREATE TABLE `auteurs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`auteur` varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO `auteurs` (`id`, `auteur`) VALUES
(1, 'Mounir Toub'),
(2, 'Miljuschka'),
(3, 'Wim Ballieu');
CREATE TABLE `posts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`titel` varchar(255) DEFAULT NULL,
`datum` datetime DEFAULT current_timestamp(),
`img_url` varchar(255) DEFAULT NULL,
`inhoud` text DEFAULT NULL,
`auteur_id` int(11) DEFAULT NULL,
`likes` int(11) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO `posts` (`id`, `titel`, `datum`, `img_url`, `inhoud`, `auteur_id`, `likes`) VALUES
(1, 'Pindakaas', '2020-06-18 13:25:00', 'https://i.ibb.co/C0Lb7R1/pindakaas.jpg', 'Verwarm de oven voor op 180 °C. Verdeel de pinda’s over een met bakpapier beklede bakplaat en rooster in ca. 8 min. lichtbruin. Schep regelmatig om. Maal de warme pinda’s in de keukenmachine in 4 min. tot een grove, dikke pindakaas. Schep de rand van de kom regelmatig schoon met een spatel. Voeg het zout, de olie en honing toe en maal nog 1 min. tot een gladde pindakaas. Schep in een pot en sluit af.\r\n variatietip: Houd je van pindakaas met een smaakje? Voeg dan na de honing 1 el sambal badjak, 1 tl gemalen kaneel of 1 el fijngehakte pure chocolade toe. bewaartip: Je kunt de pindakaas 3 weken in de koelkast bewaren.', 1, 13),
(2, 'Baklava', '2020-03-11 10:28:00', 'https://i.ibb.co/ZWVRdPT/baklava.jpg', 'Voorbereiding\r\n\r\n Verwarm de oven voor op 190 °C. Vet de bakvorm in met roomboter.\r\n Smelt de roomboter in een pannetje. Snijd het baklavadeeg op dezelfde breedte als de bakvorm en bewaar het in een schone droge keukendoek om uitdrogen te voorkomen. Verwarm in een pan 300 gr honing met 20 ml oranjebloesemwater en houd dit mengsel warm. Roer in een mengkom de gezouten roomboter, 500 g gemalen walnoten, de rest van de honing en het oranjebloesemwater en de kaneel door elkaar. Verdeel het mengsel in zeven gelijke porties (van circa 90 g).\r\n\r\n Bereiding\r\n Bestrijk een vel baklavadeeg met gesmolten roomboter. Leg er een tweede vel op en bestrijk dat ook. Neem één portie van het walnotenmengsel en verdeel dat onderaan over het baklavadeeg. Rol op tot een staaf, leg deze in de bakvorm en bestrijk met gesmolten roomboter. Maak de rest van de staven op dezelfde manier.\r\n Snijd elke staaf met een scherp mes meteen in zessen. Bak de baklava in circa 25 minuten goudbruin en krokant in de oven.\r\n Neem de bakvorm uit de oven en verdeel de warme honing over de baklava. Garneer meteen met de rest van de fijngemalen walnoten. Laat de baklava minimaal 3 uur afkoelen voordat je ervan gaat genieten.', 3, 7);
CREATE TABLE `posts_tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`post_id` int(11) DEFAULT NULL,
`tag_id` int(11) DEFAULT NULL,
PRIMARY KEY (id)
);
CREATE TABLE `tags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`titel` varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
);
ALTER TABLE `posts`
ADD KEY `auteur_id` (`auteur_id`);
--
-- Indexen voor tabel `posts_tags`
--
ALTER TABLE `posts_tags`
ADD KEY `post_id` (`post_id`),
ADD KEY `tag_id` (`tag_id`);
ALTER TABLE `posts`
ADD CONSTRAINT `posts_ibfk_1` FOREIGN KEY (`auteur_id`) REFERENCES `auteurs` (`id`);
ALTER TABLE `posts_tags`
ADD CONSTRAINT `posts_tags_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`),
ADD CONSTRAINT `posts_tags_ibfk_2` FOREIGN KEY (`tag_id`) REFERENCES `tags` (`id`);
COMMIT;
正确且有效的查询是: SELECT *, tags.titel AS 标签来自 posts_tags INNER JOIN 标签 ON posts_tags.post_id = tags.id INNER JOIN 帖子 ON posts.id = tags.id分组依据 posts.id;