如何对两个单独的表使用 mysql WHERE IN

How to use mysql WHERE IN for two separate tables

我有两个表

books_tbl:

blocks  side-bar   top-bar
 23,45   3,15      11,56

pages_tbl:

id title
1  ff
3
11
15

我想 select 来自 pages_tbl 的行,其中页面 ID 包含 books_table 中的块、边栏或 tob 栏列。

如何处理?

你真的应该考虑修复你的 table 结构。切勿在单个单元格中存储多个值。请参阅规范化。

因为在这种情况下你不能,请尝试使用 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
);

请记住,这 变慢,因为服务器无法使用索引(如果有的话)。

在单个字段中存储逗号分隔值通常不是一个好主意。如果你真的不能改变你的数据结构,你可以使用这样的查询:

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