Ich habe Probleme, meine SQL-Abfrage in eine JOIN-Abfrage zu transformieren, die viel performanter ist. Hier ist die AbfrageMySQL JOIN zum Ersetzen von Unterabfragen (ODER NICHT 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)
)
)
schaffe ich den ersten Teil der Abfrage zurück
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
Aber ich bin es nicht die zweite Teil
OR idConceptLink NOT IN (SELECT idConceptStart FROM `Link` WHERE idConceptLink IN (11, 315))
Mit meinem linken bekommen join hinzugefügt Ich erhalte keine Ergebnisse
Wie kann ich das schaffen? Ich habe auch versucht, eine andere Abfrage mit der UNION zu machen, die OR zu ersetzen, aber ich kann nicht diese Abfrage geben
Woher kommt dieses 'UND k.flag! = 1107'? – EagleRainbow
Dieser 'OR idConceptLink' kann nicht mit' JOIN' ausgedrückt werden. Das Übersetzen logischer OR-Ausdrücke in die Welt der Mengenoperation ähnelt eher den UNION-Operatoren. Möchten Sie alle Unterabfragen loswerden oder möchten Sie nur, dass Ihre Abfrage besser abschneidet? – EagleRainbow
Eigentlich möchte ich, dass die Abfrage besser abschneidet. k.flag! = 1107 in meinem Fall ist das gleiche als flag = 0 – user3032887