请教 MySQL 的一个查询问题。

2016-04-05 02:11:37 +08:00
 LionXen
初学 MySQL

有 A 和 B 两个表

B 表里有个字段 X 来用(a,b,c,d)这种格式存储多个 A 表字段 Y

有什么办法能通过单个 A 表字段 Y 来查询包含 Y 的 B 表字段 X 数据?

如下图,我可以用 A 表数据 3 字段 Y 的值 c 来查询出 B 表数据 1 和 2



求回答,谢谢!
2934 次点击
所在节点    MySQL
12 条回复
yangqi
2016-04-05 02:30:18 +08:00
这种查询相当于搜索了,效率很低,不推荐使用
fanwei
2016-04-05 03:11:39 +08:00
。。。
B 表就不应该用这个格式去存数据。
应该类似下面这样去存


ID B 表 字段 X
1 1 a
2 1 c
3 1 d
4 2 c
5 2 d
6 3 a
7 3 d
8 4 b
msg7086
2016-04-05 03:13:46 +08:00
首先……

你还是去学一下数据库范式吧。
HanSonJ
2016-04-05 08:12:47 +08:00
设计就有问题了
palmers
2016-04-05 08:17:43 +08:00
我同意 ls 说法 不能该设计,我觉得只能通过代码和存储过程来做了
aiver
2016-04-05 08:55:01 +08:00
这个是典型的一对多的范式啊, B 表不应该这么存储 A 表的字段值,建议一对多分开存储,这样的搜索效率要高很多。基于目前的表的话,可以使用 mysql 的字符串函数: find_in_set(str1,str2)试试
stackboom
2016-04-05 08:58:52 +08:00
恩,楼上说的对,可以使用 find_in_set ,其实也可以使用 like 来实现。
Honwhy
2016-04-05 09:31:50 +08:00
LionXen
2016-04-05 09:52:04 +08:00
感谢各位的回答已找到解决办法
chongzi11
2016-04-05 10:35:03 +08:00
感谢提问,别人回答之后我也意识到数据库建表得学习一下了。
zacard
2016-04-05 11:17:39 +08:00
楼上说数据库范式的。。。如果小系统是方便的。现在都是大规模分表分库的话,都是反范式设计的。 mysql 用 find_in_set 也是可以的。一般会先通过 es 等搜索引擎查出 id 先
500miles
2016-04-05 12:01:42 +08:00
除了传统多对多设计范式,

现在大部分数据库 都在提供 json 支持了..

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/268562

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX