Sqlite 查询从多对多关系中检索数据
Sqlite query to retrieve data from many to many relationship
我有一个多对多关系的 sqlite 数据库,它有三个表 images、tags,第三个表用于许多对多关系 images_tags.
他们的属性如下:
图片(id,位置,大小,upload_date),
标签(ID,名称),
images_tags(id,image_id,tag_id)
现在我想检索所有图像数据及其所有关联标签(在本例中为标签 ID),我知道加入将在这里玩游戏,但我无法找到正确的查询。任何帮助将不胜感激..我是这个数据库的新手!
以下将 return 行列表,其中每行都有图像数据和标签。
SELECT images.*,tags.* FROM images JOIN images_tags ON images.id = images_tags.image_id JOIN tags ON tags.id = images_tags.tag_id ORDER BY images.id
例如像 :-
您可以根据图像(例如)分组并使用类似 :-
SELECT images.*,
group_concat(tags.id),
group_concat(tags.name,':')
FROM images
JOIN images_tags ON images.id = images_tags.image_id
JOIN tags ON tags.id = images_tags.tag_id
GROUP BY images.id
ORDER BY images.id;
从相同的数据会产生:-
- 请注意,如果列名称不明确(例如,id 列对于图像和标签 table 都是通用的,因此您只需要 table_name.column.name,则可以缩短上面的内容与 table 名称不明确)
以下是用于提供结果的全部代码:-
DROP TABLE IF EXISTS tags;
DROP TABLE IF EXISTS images;
CREATE TABLE IF NOT EXISTS images (id INTEGER PRIMARY KEY, location TEXT, size INTEGER, upload_date TEXT);
CREATE TABLE IF NOT EXISTS tags (id INTEGER PRIMARY KEY, name TEXT);
CREATE TABLE IF NOT EXISTS images_tags (id INTEGER /*<<< not required */,image_id INTEGER, tag_id INTEGER, PRIMARY KEY (image_id, tag_id));
INSERT INTO images VALUES
(1,'loc1',10,'2022-02-23'),(2,'loc2',20,'2022-02-23'),(3,'loc3',30,'2022-02-23')
;
INSERT INTO tags VALUES
(1,'tag1'),(2,'tag2'),(3,'tag3'),(4,'tag4'),(5,'tag5')
;
INSERT INTO images_tags VALUES
(0,1,1),(0,1,3),(0,1,5),
(0,2,2),(0,2,4),
(0,3,1),(0,3,2),(0,3,3),(0,3,4),(0,3,5)
;
SELECT images.*,tags.* FROM images JOIN images_tags ON images.id = images_tags.image_id JOIN tags ON tags.id = images_tags.tag_id ORDER BY images.id;
SELECT images.*,group_concat(tags.id),group_concat(tags.name,':') FROM images JOIN images_tags ON images.id = images_tags.image_id JOIN tags ON tags.id = images_tags.tag_id GROUP BY images.id ORDER BY images.id;
DROP TABLE IF EXISTS images_tags;
DROP TABLE IF EXISTS tags;
DROP TABLE IF EXISTS images;
我有一个多对多关系的 sqlite 数据库,它有三个表 images、tags,第三个表用于许多对多关系 images_tags.
他们的属性如下: 图片(id,位置,大小,upload_date), 标签(ID,名称), images_tags(id,image_id,tag_id)
现在我想检索所有图像数据及其所有关联标签(在本例中为标签 ID),我知道加入将在这里玩游戏,但我无法找到正确的查询。任何帮助将不胜感激..我是这个数据库的新手!
以下将 return 行列表,其中每行都有图像数据和标签。
SELECT images.*,tags.* FROM images JOIN images_tags ON images.id = images_tags.image_id JOIN tags ON tags.id = images_tags.tag_id ORDER BY images.id
例如像 :-
您可以根据图像(例如)分组并使用类似 :-
SELECT images.*,
group_concat(tags.id),
group_concat(tags.name,':')
FROM images
JOIN images_tags ON images.id = images_tags.image_id
JOIN tags ON tags.id = images_tags.tag_id
GROUP BY images.id
ORDER BY images.id;
从相同的数据会产生:-
- 请注意,如果列名称不明确(例如,id 列对于图像和标签 table 都是通用的,因此您只需要 table_name.column.name,则可以缩短上面的内容与 table 名称不明确)
以下是用于提供结果的全部代码:-
DROP TABLE IF EXISTS tags;
DROP TABLE IF EXISTS images;
CREATE TABLE IF NOT EXISTS images (id INTEGER PRIMARY KEY, location TEXT, size INTEGER, upload_date TEXT);
CREATE TABLE IF NOT EXISTS tags (id INTEGER PRIMARY KEY, name TEXT);
CREATE TABLE IF NOT EXISTS images_tags (id INTEGER /*<<< not required */,image_id INTEGER, tag_id INTEGER, PRIMARY KEY (image_id, tag_id));
INSERT INTO images VALUES
(1,'loc1',10,'2022-02-23'),(2,'loc2',20,'2022-02-23'),(3,'loc3',30,'2022-02-23')
;
INSERT INTO tags VALUES
(1,'tag1'),(2,'tag2'),(3,'tag3'),(4,'tag4'),(5,'tag5')
;
INSERT INTO images_tags VALUES
(0,1,1),(0,1,3),(0,1,5),
(0,2,2),(0,2,4),
(0,3,1),(0,3,2),(0,3,3),(0,3,4),(0,3,5)
;
SELECT images.*,tags.* FROM images JOIN images_tags ON images.id = images_tags.image_id JOIN tags ON tags.id = images_tags.tag_id ORDER BY images.id;
SELECT images.*,group_concat(tags.id),group_concat(tags.name,':') FROM images JOIN images_tags ON images.id = images_tags.image_id JOIN tags ON tags.id = images_tags.tag_id GROUP BY images.id ORDER BY images.id;
DROP TABLE IF EXISTS images_tags;
DROP TABLE IF EXISTS tags;
DROP TABLE IF EXISTS images;