簡體   English   中英

或INNER JOIN 3桌

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM