0

我有以下表结构

Table 1                  Table 2
----------             -------------------
Id  value              Id   ids    value
1   item1              1    1,3    Item1
2   item2              2    2,1    Item2
3   item3              3    1,3,5  Item3
4   item4              4    1      Item4
5   item5              5    2,1    Item5

现在我想从表 2 中获取与表 1 匹配的所有记录,例如表 1 中的 ID 与表 2 中的 id 匹配

我想要这样的结果

table1.value           table2.value
item1                  Item1
item1                  Item2
item1                  Item3
item1                  Item4
item1                  Item5
item2                  Item2
item2                  Item5
item3                  Item1
item3                  Item3
item5                  Item3

我使用了以下查询

SELECT table1.value, table2.value FROM table1, table2 WHERE table1.id IN (table2.ids)

但没有像我上面提到的那样出去。有什么帮助吗?

4

1 回答 1

3

这是数据结构错误的证据。您的数据应该使用关联表而不是列表来存储。但你可以这样做:

select t1.value, t2.value
from table2 t2 join
     table1 t1
     on find_in_set(t1.id, t2.ids) > 0;

另一种表述方式是使用like. 这个想法适用于任何数据库,尽管字符串连接不同:

select t1.value, t2.value
from table2 t2 join
     table1 t1
     on concat(',', t2.ids, ',') like concat('%,', t1.id, ',%')
于 2013-07-06T12:55:45.757 回答