我对此查询有一些问题,我不知道错误在哪里。
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的用户的电子邮件
答案 0 :(得分:0)
UNTESTED:
我认为你缺少C上的连接标准,这导致引擎必须加入比它应该更多的记录;或者你可以加入C而不是A而不是A.这只能起作用,因为你在所有情况下都使用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 - >乙
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)