我有三个用于标记的表。第一个是 question
表,其中包含具有特定 ID 的问题列表。第二个是 tag
表,其中包含具有特定 ID 的标签名称列表。第三个是 question_tag
表,是问题到标签的集合。具有多个标签的问题意味着 question_tag
中有多行,我想过将序列化数组存储到 question_tag
表中,但通常将数组存储在SQL 数据库。
下面是架构。箭头表示外键。
-------------------
----------------- | question_tag |
| question | ------------------- ------------------
----------------- | question_tag_ID | | tag |
| question_ID | ---> | question_ID | ------------------
----------------- | tag_ID | <----- | tag_ID |
------------------- | tag_name |
------------------
我想进行一个查询来输出下面的表格。
----------------------------------------------------
| question_id | tag_name |
----------------------------------------------------
| 1 | algebra, calculus, differentiation |
| 2 | calculus |
| 3 | algebra, trigonometry |
----------------------------------------------------
我如何设法执行此查询?我考虑过 SELECTING from question
和 JOINING
一个 SELECT tag.tag_name FROM tag WHERE Question_tag.tag_ID = tag.tag_ID
的临时表,但是如何我是否像上表一样输出这个右列(tag_name)。
如果您能帮助我完成这个 SQL 查询,我将非常感激,我猜我需要对 RIGHT (tag_name) 列执行嵌套 SELECT 查询,然后将其联接到 Question_table。但我不知道如何嵌套 SELECT 查询。
这是我想出的:
SELECT * FROM Question as Q LEFT JOIN (SELECT T.tag_name FROM tag as T WHERE T.tag_id IN (SELECT QT.tag_id FROM Question_tag AS QT WHERE QT.question_ID = Q.id)) AS QT_T
最佳答案
您需要聚合和连接。请查看一些相关问题:
Does T-SQL have an aggregate function to concatenate strings?
Implode type function in SQL Server 2000?
How to use GROUP BY to concatenate strings in MySQL?
Aggregate String Concatenation in Oracle 10g
Create a delimitted string from a query in DB2
How to concatenate strings of a string field in a PostgreSQL 'group by' query?
更新
虽然我没有 mysql 数据库来测试它,但离开上述链接之一(知道这是 mysql),我设计了以下查询:
SELECT
qt.question_id,
GROUP_CONCAT(t.tag_name SEPARATOR ',')
FROM question_tag qt
LEFT JOIN tag t ON t.tag_id = qt.tag_id
GROUP BY qt.question_id;
请尝试一下,如果有效请告诉我。
关于mysql - 标签数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415220/