gpt4 book ai didi

mysql - 使用 or 条件进行内连接

转载 作者:行者123 更新时间:2023-11-29 09:29:49 24 4
gpt4 key购买 nike

我有两个表如下

1. Table tb1
===============================
id name originator
1 xyz 40
2 abc 40
3 xyz1 50
4 abc1 60


2. Table tb2
=======================================
id_fk partyId permission
1 40 admin
1 41 user
2 43 user
3 40 admin
3 67 user
3 88 admin
4 40 admin
4 51 user

我需要编写一个查询,该查询将带来发起者为 40 或 partyId 为 40 的 id

  1. 从 tb1 t1,tb2 t2 中选择 id,其中 t1.id=t2.id_fk 和(t1.originator = 40 或 t1.id in(从 tb2 中选择 id_fk,其中 partyId=40))

  2. 从 tb1 t1、tb2 t2 中选择 id,其中 t1.id=t2.id_fk 且(t1.originator = 40 或 t2.partyId=50)

但是上述两个查询花费了超过 200 万条记录的大量时间。

谁能帮我优化这个查询。

最佳答案

您最好使用联合查询来处理此问题,以便可以分别优化每个部分的索引

select DISTINCT
tb1.id
from
tb1
where
tb1.originator = 40
UNION
select
tb2.id_fk as id
from
tb2
where
tb2.PartyID = 40

我会在您的表上有以下索引

Table    Index
TB1 (Originator, id)
TB2 (PartyID, id_fk)

无论有多少条记录符合条件(例如 TB2 中给定人员的多个详细记录),对于任何给定 ID,select unique 都只会返回一条记录。还有 TB1 中基于原作的内容。

如果您随后想要这些人的姓名,您可以将其包装起来以根据结果 ID 获取姓名。

您在对我的直接评论中提到了订单依据和限制,但没有澄清。订购的依据是什么。你想知道名字吗?还有限制...请通过为其他人编辑原始帖子来提供更多信息。但是,我只会通过调整

select
PQ.*
from
( entire query above ) PQ
order by
PQ.ID
limit
0,15

关于mysql - 使用 or 条件进行内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58933563/

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