我在此查询中遇到一些问题,我不知道错误在哪里。
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
因此,我需要从在表B或表C上具有SID 200的用户的表A中获取电子邮件
最佳答案
未测试:
我认为您缺少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 - 或INNER JOIN 3 table ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41782523/