나는 리소스를 zapping하고 그것을 다시 작성해야하는 긴 쿼리가 있습니다. 명백한 문제는 where 절에 "not in"을 사용하는 것입니다. 초기 생각은 모든 자체 조인을 수행하지 않고 하위 쿼리에 "존재하지 않음"을 수행하여 다시 작성하는 것입니다. 그 일에 대한 어떤 생각이든, 아니면 그 생각보다 더 효율적인 생각일까요?이 mysql select 쿼리를 작성하는 더 좋은 방법은
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 개의 memberID를 얻으려고합니까? 이 쿼리의 목표에 대한 자세한 정보를 제공해 주시겠습니까? – Jeffrey