2017-07-27 4 views
0
SELECT 
    table1.a, 
    table1.b, 
    (SELECT b 
    FROM table2 
    WHERE table2.b - table1.a < 10 
    LIMIT 0,1) as test 
FROM table1 
WHERE table1.b < test; 

Ich versuche, das Ergebnis in den SELECT "Variable" Test in dem WHERE-Teil meiner Anfrage erhalten zu verwenden.mySQL Reusing berechneter Wert in WHERE-Klausel

Irgendeine Idee, wie man das macht, ohne die Berechnung oder was auch immer in der WHERE wiederholen zu müssen? So habe ich es bisher geschafft.

+0

Nicht möglich, Sie können keine Aliase in der WHERE-Klausel verwenden. Aber nur die exakt gleiche Berechnung in der WHERE-Klausel zu wiederholen ist in der Regel kein Problem, diese wird intern optimiert, so dass die Berechnung nur einmal erfolgt. – CBroe

Antwort

0

Sie können es nicht in WHERE verwenden, aber Sie können HAVING dafür verwenden. Da hast du dein Ergebnis. Aber das ist nicht sehr performant.

SELECT table1.a, table1.b, 
    (select b FROM table2 WHERE table2.b-table1.a<10 LIMIT 0,1) as test 
FROM table1 
HAVING table1.b<test 

Wenn Sie WHERE verwenden, dann haben Sie Ihre subselect an dieser Position erstellen

SELECT table1.a, table1.b, 
    (select b FROM table2 WHERE table2.b-table1.a<10 LIMIT 0,1) as test 
FROM table1 
WHERE table1.b < (select b FROM table2 WHERE table2.b-table1.a<10 LIMIT 0,1) 
+0

Kann ich nicht so etwas tun? SELECT table1.a, table1.b, @ test: = (wählen Sie b aus Tabelle2 WHERE table2.b-table1.a <10 LIMIT 0,1) als Test FROM table1 WHERE table1.b <@test> – blackswan

0

Ich denke, diese Abfrage wird das Ergebnis geben, wie Sie wollen.

SELECT table1.a , 
table1.b , 
table2.b 
FROM table1 , 
table2 
WHERE 
table1.b < table2.b AND 
(table2.b - table1.a) < 10 
0

Ihre test Variabel ist gleich table2.b, dass der Wert kleiner als table1.a +10. Somit ist es möglich, die Abfrage

SELECT 
    table1.a, 
    table1.b, 
    table2.b AS test 
FROM table1 
JOIN table2 
ON (table2.b - table1.a < 10) AND (table1.b < table2.b) 
GROUP BY table1.a, table1.b; 

Die GROUP BY-Klausel verwendet wird, hier zu konvertieren Vervielfältigung von table1.a und table1.b Kombinationen zu verhindern und sie table2.b Wert für jede table1.a und table1.b Kombination zu erhalten.

Verwandte Themen