count abfrage aus 2 Tabellen

Hallo,
ich hab ein Problem und zwar habe ich eine Abfrage gestaltet in dem gezählt wird wie viel betriebe montags, dienstags… sonntags in einem gewissen zeitraum offen haben. Die Abfrage habe ich so gelöst und funktioniert auch

Select offen.betrieb, offen.gueltigvon, offen.gueltigbis, offen.tag, offen.uhrvon, offen.uhrbis, 
(select count(offen.betrieb) from offen where tag = 'MO'and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as mo,
(select count(offen.betrieb) from offen where tag = 'DI' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as di,
(select count(offen.betrieb) from offen where tag = 'MI' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as mi,
(select count(offen.betrieb) from offen where tag = 'DO' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as do,
(select count(offen.betrieb) from offen where tag = 'FR' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as fr,
(select count(offen.betrieb) from offen where tag = 'SA' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as sa,
(select count(offen.betrieb) from offen where tag = 'SO' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as so
 from offen where  tag = 'MO' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis)

wenn ich jetzt allerdings eine zweite tabelle einbauen will um herauszufinden welche betriebe in welcher gemeinde offen haben also am beispiel des montags:

Select betriebe.name, betriebe.gemeinde, offen.betrieb, offen.gueltigvon, offen.gueltigbis, offen.tag, offen.uhrvon, offen.uhrbis, 
(select count(offen.betrieb) from offen, betriebe where betriebe.name = offen.betrieb and tag = 'MO'and ('2013-01-01' between gueltigvon and gueltigbis or '2013-01-31' between gueltigvon and gueltigbis))as mo,
(select count(betriebe.gemeinde) from betriebe, offen where gemeinde ='Sulztal an der Weinstrasse' and  betriebe.name = offen.betrieb and tag = 'MO' and ('2013-01-01' between gueltigvon and gueltigbis or '2013-01-31' between gueltigvon and gueltigbis)) as gam

from betriebe,offen where betriebe.name=offen.betrieb and  tag = 'MO' and ('2013-01-01' between gueltigvon and gueltigbis or '2013-01-31' between gueltigvon and gueltigbis)

dann allerdings stimmt das ergebnis nicht mehr es verschwinden betriebe die eigentlich offen hätten, hat vl irgendjemand eine idee woran es liegen könnte?

niemand eine idee?

Vielleicht. Trägst Du für jeden TAG da eine Zeile ein? Also in offen für jeden Wochentag? Zeig mal die Tabellen und ein paar Demo-Daten. Welche Version? In 9.2 gibt es RANGE-Typen.

Im übrigen scheint Deine erste Abfrage Bullshit zu erzeugen.

test=*# select * from offen ;
 betrieb | gueltigvon | gueltigbis | tag |  uhrvon  |  uhrbis
---------+------------+------------+-----+----------+----------
 test    | 2013-01-01 | 2013-12-31 | MO  | 08:00:00 | 17:00:00
 test    | 2013-01-01 | 2013-12-31 | DI  | 08:00:00 | 17:00:00
 test    | 2013-01-01 | 2013-12-31 | MI  | 08:00:00 | 17:00:00
 test    | 2013-01-01 | 2013-12-31 | DO  | 08:00:00 | 17:00:00
 test    | 2013-01-01 | 2013-12-31 | FR  | 08:00:00 | 17:00:00
 test2   | 2013-01-01 | 2013-12-31 | MO  | 08:00:00 | 17:00:00
 test2   | 2013-01-01 | 2013-12-31 | DI  | 08:00:00 | 17:00:00
 test2   | 2013-01-01 | 2013-12-31 | MI  | 09:00:00 | 18:00:00
(8 rows)

Für test2 gibt es nur Einträge für MO, DI und MI, die Öffnungszeit MI ist anders als DI. Deine Abfrage liefert:

test=*# Select offen.betrieb, offen.gueltigvon, offen.gueltigbis, offen.tag, offen.uhrvon, offen.uhrbis,
(select count(offen.betrieb) from offen where tag = 'MO'and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as mo,
(select count(offen.betrieb) from offen where tag = 'DI' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as di,
(select count(offen.betrieb) from offen where tag = 'MI' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as mi,
(select count(offen.betrieb) from offen where tag = 'DO' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as do,
(select count(offen.betrieb) from offen where tag = 'FR' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as fr,
(select count(offen.betrieb) from offen where tag = 'SA' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as sa,
(select count(offen.betrieb) from offen where tag = 'SO' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis))as so
 from offen where  tag = 'MO' and ('2013-07-01' between gueltigvon and gueltigbis or '2013-07-31' between gueltigvon and gueltigbis);
 betrieb | gueltigvon | gueltigbis | tag |  uhrvon  |  uhrbis  | mo | di | mi | do | fr | sa | so
---------+------------+------------+-----+----------+----------+----+----+----+----+----+----+----
 test    | 2013-01-01 | 2013-12-31 | MO  | 08:00:00 | 17:00:00 |  2 |  2 |  2 |  1 |  1 |  0 |  0
 test2   | 2013-01-01 | 2013-12-31 | MO  | 08:00:00 | 17:00:00 |  2 |  2 |  2 |  1 |  1 |  0 |  0
(2 rows)

Ich glaube nicht, daß das so gewollt ist…

[/quote]


doch das ist so gewollt, denn ich möchte nur wissen welche an diesem tag offen haben, die uhrzeit kann ich eigentlich auch komplett weg lassen, wollte sie zu erst einbauen, macht aber für mich nicht wirklich einen sinn.

prinzipiell funktioniert auch die zweite abfrage,
aber das ergebniss stimmt nicht mit der abfrage überein wo ich die gemeinde nicht miteinbaue und das ist auch das richtige ergebniss, hab es händisch nach kontrolliert, hab mal beide abfragen angehängt


Meinte Tabelle ist ganz genau gleich aufgebaut wie deine test tabelle.