我有两张桌子
books_tbl :
blocks side-bar top-bar
23,45 3,15 11,56
pages_tbl :
id title
1 ff
3
11
15
我想选择pages_tbl
中的行,其中页面ID包含books_table
中的block,side-bar或tob-bar列。
如何处理?
答案 0 :(得分:1)
您应该考虑修复表结构。永远不要在单个单元格中存储多个值。请参阅标准化。
在这种情况下,你不能尝试使用find_in_set
函数。
select
from pages_tbl p
where exists (
select 1
from books_tbl b
where find_in_set(
p.id,
concat(b.blocks, ',', b.side_bar, ',', b.top_bar)
) > 0
);
请记住,此将变慢,因为服务器无法使用索引。
答案 1 :(得分:1)
将逗号分隔值存储在单个字段中通常不是一个好主意。如果您真的无法更改数据结构,可以使用如下查询:
select p.id, p.title
from
pages_tbl p inner join books_tbl b
on (
find_in_set(p.id, b.blocks)
or find_in_set(p.id, b.side-bar)
or find_in_set(p.id, b.top-bar)
)
-- add where condition?
group by p.id, p.title