我有一個具有多對多關系的 sqlite 資料庫,它有三個表images、tags和第三個表,用于多對多關系images_tags。
它們的屬性為:images(id,location,size,upload_date), tags(id,name), images_tags(id,image_id,tag_id)
現在我想檢索所有影像資料及其所有相關標簽(本例中的標簽 id),我知道 joins 將在這里玩游戲,但我無法找到正確的查詢。任何幫助將不勝感激..我是這個資料庫的新手!
uj5u.com熱心網友回復:
下面將回傳一個行串列,其中每個行都有影像資料和標簽。
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;
從相同的資料中會產生:-

- 請注意,如果列名不明確,則上述內容可以縮短,因為您只需要 table_name.column.name (例如,id 列對 images 和 tags 表都是通用的,因此與表名不明確)
以下是用于提供結果的完整代碼:-
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434091.html
