2016-05-11 8 views
0

Ich habe diese Anfrage:Wie Sub-Abfrage-Ergebnis zweimal in der Abfrage verwenden?

UPDATE QandA SET accepted = IF (id <> :answer_id, 0, 1) 
    WHERE col1 = (SELECT related FROM QandA WHERE id = :answer_id) AND 
     col2 = (SELECT related FROM QandA WHERE id = :answer_id) 

Wie Sie sehen zwei identische Unterabfragen ist. Wie kann ich diese Unterabfrage einmal schreiben und das Ergebnis zweimal verwenden?

+0

Sie können Verwenden Sie die temporäre Tabelle, um den Wert für die Unterabfragen zu speichern, und verwenden Sie die Daten aus der temporären Tabelle in der Abfrage. –

Antwort

2

Verwendung kann CROSS JOIN verwenden:

UPDATE QandA CROSS JOIN 
     (SELECT related FROM QandA WHERE id = :answer_id) x 
    SET accepted = (id = :answer_id) 
WHERE col1 = x.related AND col2 = x.related; 

Bitte beachte, dass ich auch die if() entfernt. Dies ist in MySQL nicht erforderlich, wenn boolesche Ausdrücke in einem numerischen Kontext als Ganzzahlen behandelt werden.

Eine Alternative wäre verwenden IN:

WHERE (SELECT related FROM QandA WHERE id = :answer_id) IN (col1, col2) 
1

Keine Notwendigkeit für zwei Unterabfragen hier ist genug, nur um sicher machen col1 = col2 und fertig:

UPDATE QandA SET accepted = IF (id <> :answer_id, 0, 1) 
    WHERE col1 = (SELECT related FROM QandA WHERE id = :answer_id) AND 
     col2 = col1 
+0

Ich bin mir nicht sicher, ob es funktioniert, aber wenn es ist, dann gut gespielt. +1 – Shafizadeh

Verwandte Themen