[英]OR on INNER JOIN 3 Tables
我在此查詢中遇到一些問題,我不知道錯誤在哪里。
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
引擎不知道如何綁定BC,因此,如果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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.