我无法将我的SQL查询转换为更高性能的JOIN查询。下面是该查询MySQL JOIN替换子查询(OR NOT IN)
SELECT * FROM `Link`
WHERE idConceptStart = 31 AND flag = 0 AND (
idConceptLink IN (
SELECT idConceptStart FROM Link
WHERE idConceptTarget = 13
AND idConceptLink IN (11, 315)
)
OR idConceptLink NOT IN (
SELECT idConceptStart FROM `Link` WHERE idConceptLink IN (11, 315)
)
)
我设法返回查询
SELECT * FROM `Link` l
JOIN `Link` j ON l.idConceptLink = j.idConceptStart
LEFT JOIN Link k ON k.idConceptStart = l.idConceptLink
WHERE l.idConceptStart = 31
AND j.flag = 0 AND j.idConceptTarget IN(13)
AND j.idConceptLink IN (11, 315)
AND k.idConceptLink IN (11, 315) AND k.flag != 1107
AND l.flag = 0
AND k.`idConceptStart` IS NULL
的第一部分,但我没有得到第二部分
OR idConceptLink NOT IN (SELECT idConceptStart FROM `Link` WHERE idConceptLink IN (11, 315))
用我的左连接添加我没有得到任何结果
我该如何管理?我试着也使使用UNION更换或其他查询,但我不能设法让这个查询
这个'AND k.flag!= 1107'从哪里来? – EagleRainbow
这个'OR idConceptLink'不能用'JOIN'表示。将逻辑“OR”表达式转换为set操作的世界更像是“UNION”操作符。你想摆脱所有的子查询,还是只想让查询性能更好? – EagleRainbow
其实我希望查询性能更好。 在我的情况下,k.flag!= 1107与flag = 0相同 – user3032887