我有一個很長的查詢是切換資源,並需要重寫它。 它的一個顯而易見的問題是在where子句中使用「not in」。 我最初的想法是重寫它,廢除所有的自聯接,並在子查詢上做一個「不存在」。有沒有想過這樣做,或者比這更有效的想法?一個更好的方法來寫這個MySQL選擇查詢
這裏的查詢:
SELECT a.referenceid,
a.memberid AS d1,
b.memberid AS d2,
c.memberid AS d3,
d.memberid AS d4,
e.memberid AS d5,
f.memberid AS d6
FROM jos_comprofiler_members AS a FORCE INDEX (aprm)
LEFT JOIN jos_comprofiler_members AS b FORCE INDEX (aprm)
ON a.memberid = b.referenceid
AND b.accepted = 1
AND b.pending = 0
LEFT JOIN jos_comprofiler_members AS c FORCE INDEX (aprm)
ON b.memberid = c.referenceid
AND c.accepted = 1
AND c.pending = 0
LEFT JOIN jos_comprofiler_members AS d FORCE INDEX (pamr)
ON c.memberid = d.referenceid
AND d.accepted = 1
AND d.pending = 0
LEFT JOIN jos_comprofiler_members AS e FORCE INDEX (pamr)
ON d.memberid = e.referenceid
AND e.accepted = 1
AND e.pending = 0
LEFT JOIN jos_comprofiler_members AS f FORCE INDEX (pamr)
ON e.memberid = f.referenceid
AND f.accepted = 1
AND f.pending = 0
WHERE a.referenceid = 1593
AND a.accepted = 1
AND a.pending = 0
AND f.memberid = 1593
AND b.memberid NOT IN (1593, a.memberid)
AND c.memberid NOT IN (1593, a.memberid, b.memberid)
AND d.memberid NOT IN (1593, a.memberid, b.memberid, c.memberid)
AND e.memberid NOT IN (
1593, a.memberid, b.memberid, c.memberid, d.memberid)
AND f.memberid NOT IN (1593, a.memberid, b.memberid, c.memberid,
d.memberid, e.memberid)
LIMIT 0, 1
WOAH!這是很多... –
對不起,我不清楚這些連接點是什麼.. – Kermit
您正試圖從同一張表中獲得6個不同的成員ID?你能提供關於這個查詢目標的更多信息嗎? – Jeffrey