maniak: MYSQL 5: Datenbankabfrage UNION

Hallo an alle!

Meine Datenbankkenntnisse sind etwas eingerostet, weshalb ich mich ein wenig schwer tue. Vielleicht kann mir ja jemand von euch helfen!

Ich habe folgende Datenbanken:
app
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| app          | varchar(3)   | NO   | PRI | NULL    |       |
| fak          | int(3)       | NO   |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+

buchungen
+---------+--------------+------+-----+----------+----------------+
| Field   | Type         | Null | Key | Default  | Extra          |
+---------+--------------+------+-----+----------+----------------+
| id      | bigint(20)   | NO   | PRI | NULL     | auto_increment |
| owner   | varchar(255) | NO   |     | -        |                |
| app     | varchar(3)   | NO   |     | NULL     |                |
| titel   | varchar(15)  | NO   |     | NULL     |                |
| dauer   | varchar(4)   | NO   |     | NULL     |                |
| anfang  | date         | NO   |     | NULL     |                |
| ende    | date         | NO   |     | NULL     |                |
+---------+--------------+------+-----+----------+----------------+

und möchte daraus folgendes Resultat:
+-----+---------+
| app | percent |
+-----+---------+
| A   |    NULL |
| B   |    NULL |
| C   |    NULL |
| D   |    NULL |
| E   |      20 |
| F   |    NULL |
| G   |    NULL |
| H   |      50 |
| I   |    NULL |
| J   |    NULL |
| K   |    NULL |
| L   |    NULL |
| M   |    NULL |
| N   |    NULL |
+-----+---------+

Folgende Query habe ich dazu generiert:

SELECT DISTINCT * from ((Select  
			app,  
			ROUND(SUM(DATEDIFF(ende,anfang))/DATEDIFF('2009-12-31','2009-12-01')*100) as percent  
			FROM buchungen  
			WHERE  
			ende <= '2009-12-31' AND anfang  >= '2009-12-01'  
			AND deleted = 0  
			GROUP BY app)  
UNION  
(SELECT DISTINCT app,NULL from apps )) as t group by app

Diese Query funktioniert, erscheint mir jedoch recht "durchs Auge ins Knie" Programmiert. Im Wesentlichen geht es mir hier um die Zusammenfassung der Werte percent, wobei ich trotzdem die app Values haben möchte, in denen keine Belegung (ende/anfang) existiert. Diese Lösung ist eher ein Workaround...

Für Verbesserungsvorschläge wäre ich euch dankbar!!

Viele Grüße
Dennis

  1. moin,

    Ich habe folgende Datenbanken:

    das sah mir mehr nach zwei tabellen aus und weniger um datenbanken....

    Diese Query funktioniert, erscheint mir jedoch recht "durchs Auge ins Knie" Programmiert.

    sieht auf den ersten blick auch so aus, kannst du noch mal in worte fassen, was genau du abfragen willst. beispieldaten wären auch hilfreich

    Ilja