如何对两个单独的表使用 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
我有两个表
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