gpt4 book ai didi

SQL 选择查询内连接多对多重构

转载 作者:行者123 更新时间:2023-12-01 01:17:10 25 4
gpt4 key购买 nike

我通过连接表entries_keywords 在条目和关键字之间建立了多对多的关系。我想获取“wake”和“up”键的所有条目。我想出的唯一方法就是这个。如果我想输入另一个搜索词,它会变得更糟。你如何重构这个?除了使用子查询之外,还有其他方法可以加入它吗?

select * 
from
(
select *
from entries e
inner join entries_keywords ek
on e.id = ek.entry_id
inner join keywords k
on ek.keyword_id = k.id
where k.key = 'wake'
) e
inner join entries_keywords ek
on e.id = ek.entry_id
inner join keywords k
on ek.keyword_id = k.id
where k.key = 'up';

最佳答案

如果您只想检索具有至少一个关键字的条目,您可以执行以下操作:

SELECT
a.*
FROM
entries a
INNER JOIN
entries_keywords b ON a.id = b.entry_id
INNER JOIN
keywords c ON b.keyword_id = c.id
WHERE
c.key IN ('wake', 'up')

如果要检索列表中包含所有关键字的条目,请添加 GROUP BYHAVING :
SELECT
a.*
FROM
entries a
INNER JOIN
entries_keywords b ON a.id = b.entry_id
INNER JOIN
keywords c ON b.keyword_id = c.id
WHERE
c.key IN ('wake', 'up')
GROUP BY
a.id
HAVING
COUNT(*) = 2

哪里 2是您正在检查的列表中的关键字数。

关于SQL 选择查询内连接多对多重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com