gpt4 book ai didi

mysql - OR 在 INNER JOIN 3 表上

转载 作者:行者123 更新时间:2023-11-29 19:30:51 25 4
gpt4 key购买 nike

我在执行此查询时遇到一些问题,但我不知道错误出在哪里。

SELECT 
DISTINCT(A.email)
FROM TABLE A
JOIN TABLE B
ON A.id=B.userid
JOIN TABLE C
ON A.id=C.userid
WHERE C.sfID = 200
OR B.sfID = 200

当我在 PHPMyAdmin 上运行查询时,查询将永远保持加载状态。

编辑:

这里是尝试解释的表格

TABLE A
USERID | EMAIL

TABLE B
ID | SID | USERID

TABLE C
ID | SID | USERID

TABLE D (i don't want to use this)
SID | SNAME

因此,我需要从表 A 获取表 B 或表 C 上 SID 200 的用户的电子邮件

最佳答案

未经测试:

我认为您缺少 C 上的连接标准,这导致引擎必须将比应有的记录更多的记录连接在一起;或者您可以通过 B 而不是 A 连接 C。这只有效,因为您在所有情况下都使用 INNER Join。如果它们是外连接,我们就不能从 A->B->C

这可能会更快:

SELECT DISTINCT A.email 
FROM TABLE A
JOIN TABLE B
ON A.id=B.userid
JOIN TABLE C
ON A.id=C.userid
AND B.userID = C.USERID
WHERE (C.sfID = 200 OR B.sfID = 200)

A-->B

A-->C

引擎不知道如何连接 B-C,因此如果 B 和 C 对于 A 中的每个值都有多个记录,那么您将加入 M:M,实际上是交叉联接。

或者可以写成:这样加入A-->B-->C

SELECT DISTINCT A.email 
FROM TABLE A
JOIN TABLE B
ON A.id=B.userid
JOIN TABLE C
ON B.userID = C.userID
WHERE (C.sfID = 200 OR B.sfID = 200)

关于mysql - OR 在 INNER JOIN 3 表上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41782523/

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