我有两个表,categories
和movies
。
在movies
表中我有一列categories
。该列由电影适合的类别组成。这些类别是用逗号分隔的ID。
这是一个例子:
Table categories {
-id- -name-
1 Action
2 Comedy
4 Drama
5 Dance
}
Table movies {
-id- -categories- (and some more columns ofc)
1 2,4
2 1,4
4 3,5
}
现在是一个实际的问题:是否可以执行一个查询,从电影表中排除类别列,而是从类别表中选择匹配的类别并以数组形式返回它们?像联接一样,但问题是存在多个用逗号分隔的类别,是否可以进行某种正则表达式?
在数据库字段中使用逗号分隔的列表是一种反模式,应不惜一切代价避免使用。
因为在SQL中将这些逗号分隔的值提取为agian是PITA。
相反,您应该添加一个单独的链接表来表示类别和电影之间的关系,如下所示:
Table categories
id integer auto_increment primary key
name varchar(255)
Table movies
id integer auto_increment primary key
name varchar(255)
Table movie_cat
movie_id integer foreign key references movies.id
cat_id integer foreign key references categories.id
primary key (movie_id, cat_id)
现在你可以做
SELECT m.name as movie_title, GROUP_CONCAT(c.name) AS categories FROM movies m
INNER JOIN movie_cat mc ON (mc.movie_id = m.id)
INNER JOIN categories c ON (c.id = mc.cat_id)
GROUP BY m.id
返回您的问题
或者可以使用数据
SELECT m.name as movie_title
, CONCAT(c1.name, if(c2.name IS NULL,'',', '), ifnull(c2.name,'')) as categories
FROM movies m
LEFT JOIN categories c2 ON
(replace(substring(substring_index(m.categories, ',', 2),
length(substring_index(m.categories, ',', 2 - 1)) + 1), ',', '') = c2.id)
INNER JOIN categories c1 ON
(replace(substring(substring_index(m.categories, ',', 1),
length(substring_index(m.categories, ',', 1 - 1)) + 1), ',', '') = c1.id)
请注意,只有每个电影有2个或更少的类别时,最后一个查询才有效。
问题内容: 我有2张桌子如下 笔记表 职位表 我想查询我的Notes表并将’forDepts’列与Positions表中的值相关联。 输出应为: 我知道数据库应该规范化,但是我不能更改此项目的数据库结构。 这将用于使用以下代码导出excel文件。 此代码仅输出“ forDepts”的第一个值 考试:执行人员(而不是执行人员,公司行政人员,Art) 可以通过CONCAT或FIND_IN_SET完成吗
问题内容: 我有两个表和相关的Java映射。 这是我的Java实体。国家POJO: 和用户POJO: 问题是,我怎么能加入到在Hibernate中使用注释?当我使用Hibernate创建User对象时,我需要自动绑定这两个字段(代码和countryCode)。 问题答案: 您需要从映射到实体,并从映射到:
问题内容: 我有两个表和字段。我想同时参加这两个领域。我试过了 可以,但是非常慢。有一个更好的方法吗? 问题答案:
问题内容: 我有一个查询,在其中我联接了三个单独的表(节点,控件,服务)。 下面是它们的列标题和示例数据。 如您所见,除了 node.serviceID 列之外,数据库表还有一些标准化。我完全衷心同意应规范化 node.serviceID 并创建一对多的数据透视表。那里没有争论。但是,我不控制将信息插入数据库的脚本。我只能从表中读取数据并格式化数据。 因此,下面是我编写的有效的SQL查询,但按预期
问题内容: 我开始将DataTables Table插件用于jQuery ,但遇到了一些问题。我从这里使用示例代码。 我有MySQL表女巫看起来像这样: id | 名称| Father_id 是同一表中仅在不同行中的值。因此,如果我想知道父亲的名字,我必须在同一个表中进行搜索。但是DataTable所做的只是按原样显示MySQL表的内容。 在我的数据表中,我想显示如下数据: id | 名称| 父亲
问题内容: 我有两个名为和的表。该表包含名为的列。 我需要从相应的表格中填充表格的列,以便表格中的每一行都有一个逗号分隔的列表,其中列出了学校名称的值。 我怎样才能做到这一点?我应该使用查询还是存储过程? 我只知道: SQL小提琴 输出需要如何 问题答案: 借助和 STUFF 来对值进行CONCATENATE,您可以轻松地用所需的结果更新表。 SQLFiddle演示