2016-07-07 7 views
0

Wie der Titel möchte ich den Wert einer Unterabfrage von einer WHERE-Klausel in der Variablen oder einer SELECT-Anweisung speichern.Die Ergebnisse der Unterabfrage mehrmals in einer Anweisung verwenden

bekam ich diese Aussage, die gut funktioniert:

SELECT a.ticket_id, (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id) as count FROM incidents a WHERE 7 < (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id); 

In zwei Erklärungen:

SET @post =1; 
SELECT a.ticket_id,@post FROM incidents a WHERE 5 < @post := (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id); 

oder mit möglich wäre ein mit natürlich kommen:

SELECT a.ticket_id,count(b.ticket_id) as count FROM incidents a JOIN im_data b ON a.ticket_id=b.ticket_id group by a.ticket_id having count(b.ticket_id) > 5 

Das Problem ist, nur würde ich gerne wissen, ob es möglich ist, das gleiche mit nur einer Abfrage zu tun. Ich versuchte es in vielen Art und Weise zu tun, die mit MySQL nicht funktionieren:

SELECT a.ticket_id, (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id) as count FROM incidents a WHERE 7 < count 

SELECT a.ticket_id, count FROM incidents a WHERE 7 < (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id) as count; 

SELECT a.ticket_id, count FROM incidents a WHERE 7 < @a (SET @a = (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id); 

Wie Sie vielleicht regonize es nicht darum, die Aufgabe zu beenden, es geht um zu bekommen, ob es möglich ist, ein zu speichern Unterabfrage in einer Variablen oder in einem Alias, um es ein zweites Mal in derselben Anweisung zu verwenden, ohne mehr als eine Anweisung zu haben, oder gibt es eine andere Möglichkeit, den Wert mehrmals in einer Anweisung zu verwenden.

Greetz thentt

+0

Sie können temporäre Tabelle für die Unterergebnisse verwenden. Oder Sie können * Inline-Ansichten * verwenden, um "temporäre Tabellen" im laufenden Betrieb zu erstellen - siehe https://www.toadworld.com/platforms/mysql/w/wiki/6347.inline-views –

Antwort

0

ich es selbst gefunden, während reseach für eine Frage auf Stackoverflow ;-).

join (select @post := 1) 

macht den Trick.

SELECT a.ticket_id,@post FROM incidents a JOIN (SELECT @post := 1) b WHERE 5 < @post := (SELECT count(*) FROM im_data b WHERE a.ticket_id=b.ticket_id);