【发布时间】:2020-07-23 13:34:35
【问题描述】:
我有 3 个表,但不知道如何创建一系列 sql 查询(或者如果可能,只创建一个复杂查询)。这些表格是:
CREATE TABLE IF NOT EXISTS excerpt(
excerptID INT UNSIGNED NOT NULL AUTO_INCREMENT,
author VARCHAR(45) NOT NULL,
title VARCHAR(255) NOT NULL,
text VARCHAR(1000) NOT NULL,
comments VARCHAR(1000) NOT NULL,
PRIMARY KEY (excerptID)
) ENGINE=INNODB CHARACTER SET utf8mb4;
CREATE TABLE IF NOT EXISTS tag(
tagID INT UNSIGNED NOT NULL AUTO_INCREMENT,
description VARCHAR(45) NOT NULL ,
PRIMARY KEY (tagID)
) ENGINE=INNODB CHARACTER SET utf8mb4;
CREATE TABLE IF NOT EXISTS tagmap (
excerptID INT UNSIGNED NOT NULL,
tagID INT UNSIGNED NOT NULL,
PRIMARY KEY (excerptID, tagID),
CONSTRAINT excerptFK FOREIGN KEY (excerptID) REFERENCES excerpt (excerptID)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT tagFK FOREIGN KEY (tagID) REFERENCES tag (tagID)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=INNODB;
基于 description 参数,我需要返回与绑定到该描述的所有摘录相关的所有标签描述。例如,如果我有四个摘录
Excerpt(1, aaaa , aaaa, aaaa, aaaa) bound via tagmap to tags (A, B, C)
Excerpt(2, bbbb, bbbb, bbbb, bbbb) bound via tagmap tags (A, D)
Excerpt(3, cccc, cccc, cccc, cccc) bound via tagmap to tag (B)
Excerpt(4, dddd, ddddd, dddd, dddd) bound via tagmap to tags (B, D)
而我的参数是“B”,我想返回一个摘录ID和描述列表:
[Tag [excerptID=1, description=A], Tag [excerptID=1, description=B], Tag [excerptID=1, description=C], Tag [excerptID=3, description=B], Tag [excerptID=4, description=B], Tag [excerptID=4, description=D]]
到目前为止我有这个
String SQL = "SELECT e.excerptID, t.description from Excerpt AS e LEFT JOIN tagmap AS m ON m.excerptID = e.excerptID LEFT JOIN tag AS t ON t.tagID = m.tagID WHERE t.description = ?";
但这只会返回这个
[Tag [excerptID=1, description=B], Tag [excerptID=3, description=B], Tag [excerptID=4, description=B]]
我不知道该怎么做。
【问题讨论】: