我在此查询中遇到一些问题,我不知道错误在哪里。

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/

10-16 14:48