我犹豫不决,我应该使用哪种类型。实际上会有很多ID和组,通常他们会教我做多个表,但是使用regexp的第二个版本似乎很棒,而且不那么多余。我很想知道这两种版本更好。
+----+ +----+-------+
| ID | | ID | Group |
+----+ +----+-------+
| 1 | | 1 | gr1 |
| 1 | | 1 | gr2 |
| 2 | | 2 | gr2 |
| 2 | | 2 | gr3 |
+----+ +----+-------+
SELECT * FROM tbl1 join tbl2 USING(ID) WHERE Group="gr1";
+----+-----------+
| ID | Group |
+----+-----------+
| 1 | gr1,gr2 |
| 2 | gr2,gr3 |
+----+-----------+
SELECT * FROM tbl1 WHERE Group REGEXP '(^|,)gr1($|,)';发布于 2013-11-17 15:27:52
只要你有小桌子,你就可以任意使用。
如果您期望表会增长,那么您确实需要选择第一选择。背后的原因是,使用where regexp的查询不会使用索引。正如您所知,索引是快速查询的关键。
如果您使用的是InnoDB,请定义一个链接这两个表的外键。
你说,你发现第一选择比第二选择有更多的冗余。在我看来不是这样的。考虑到这一点,你的素描可能会显示出一种误解。它应该是这样的,即表1中每个id只有一行,因此没有冗余。
Tbl1 Tbl2
+----+----------+ +----+-------+
| ID |Other cols| | ID | Group |
+----+----------+ +----+-------+
| 1 | | | 1 | gr1 |
| 2 | | | 1 | gr2 |
+----+----------+ | 2 | gr2 |
| 2 | gr3 |
+----+-------+https://stackoverflow.com/questions/20032343
复制相似问题