我有三个用于标记的表。第一个是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 |
----------------------------------------------------
如何设法执行此查询?我想过从question
和JOINING
选择一个SELECT tag.tag_name FROM tag WHERE question_tag.tag_ID = tag.tag_ID
的临时表,但是如何输出这个RIGHT列(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
答案 0 :(得分:1)
您需要聚合和连接。请查看一些相关问题:
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;
请尝试一下,让我知道它是否有效。