SQL Frage warum kommt hier 50 raus?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Eine Auflistung von Relationen führt zu deren kartesischen Produkt.

Nein, warum sollte es? Ohne Nebenbedinungen bildet er dann die Kombinationen der einzelnen Einträge und du bekommst daher 5 * 10 = 50 als Ergebnis. Du brauchst hier entweder ein GROUP BY oder etwas anderes um einzuschränken, dass einfach alle Kombinationen gebildet werden.


Nichtsnutz12 
Fragesteller
 27.08.2020, 23:34

wie kann man es mit einem GROUP BY beheben???

0
Nichtsnutz12 
Fragesteller
 28.08.2020, 00:38
@KuarThePirat

Keine Ahnung (sorry bin SQL Anfänger!!!) Die Tabellen hab ich net programmiert ist einfach so ne Übungsaufgabe vom Professor..

0

Nein, das was du machst ist letztlich ein CROSS JOIN, der ein kartesisches Produkt bildet, sprich du hast je Eintrag in Tabelle T1 jede Kombination mit Tabelle T2, es gibt ja keine Bedingung.

Du stellst die Tabellen also nebeneinander da. Kannst ja einfach mal das COUNT(*) weglassen, dann siehst du ja, welche Zeilen du zählst.

Ich gehe aber auch ganz stark davon aus, dass die Aufgabe etwas anderes möchte, als die Anzahl der Zeilen aus beiden Tabellen.

Das "Ergebnis" muss ja irgendeinen Sinn haben. Ich würde mal tippen, dass du anhand der gleichen Spalten einen INNER JOIN ausführen sollst, sprich:

SELECT *
FROM   T1
INNER  JOIN T2 ON T2.B = T1.B AND T2.C = T1.C

sofern die Aufgabe keine anderen Anforderungen hat. Da ist halt relevant was es sonst noch für Text dazu gibt und wie die Überschrift bzw. das Thema ist.

Und ja ggf. sollst du auch gruppieren, dann könntest du natürlich etwas machen wie:

SELECT T1.B.
       T1.C,
       COUNT(T1.A) AS CNT_A,
       COUNT(T2.E) AS CNT_E
FROM   T1
INNER  JOIN T2 ON T2.B = T1.B AND T2.C = T1.C
GROUP  BY T1.B,
       T1.C

Aber wie gesagt, alles von der Aufgabe abhängig, ggf. brauchst du statt einen COUNT z.B. SUM oder was weiß ich. Lässt sich mit den Fetzen aus der Frage nicht sagen.

Woher ich das weiß:Berufserfahrung – Softwareentwickler/Projektleiter seit 2012

apachy  28.08.2020, 08:44

Kann natürlich auch ein LEFT JOIN oder OUTER JOIN gefordert sein, der die anderen Werte als 0 darstellt oder, oder, oder.

Wenn du echt nur die Anzahl der Zeilen möchtest, dann musst du die Sachen untereinander darstellen und UNION bzw. UNION ALL verwenden, sprich etwas ala:

SELECT COUNT(*) FROM (SELECT 1 FROM T1 UNION ALL SELECT 1 FROM T2)

1 in dem Fall, weil wir verschiedene Spaltennamen haben und die sonst nicht matchen, alternativ könnte man natürlich Spalten nehmen, die in beiden Tabellen vorhanden sind oder sie umbenennen. UNION ALL damit Ergebnisse aus Tabelle T2, die auch in Tabelle T1 enthalten sind nicht rausgefiltert werden.

1

Lass dir doch mal die Ergebnisse ausgeben.

Wenn im From mehrere Tabellen stehen, hast Du effektiv ein Outer Join.

Heißt: Pro T1-Zeile wird jede einzelne T2-Zeile ausgegeben.

Woher ich das weiß:Berufserfahrung

Nichtsnutz12 
Fragesteller
 27.08.2020, 23:43

ok, ja hatte es ja ausgegeben deswegen war ich überrascht. Wie kann man das problem mit einem GROUP BY Beheben also das da 15 rauskommt ???

0
regex9  28.08.2020, 02:39
@Nichtsnutz12

Also mit GROUP BY würde ich da nicht unbedingt arbeiten.

So könnte eine Lösung aussehen (anhand dieser Demo):

select (Count1 + Count2) as RowCount
from
  (select count(*) as Count1 from Table1) as CountTable1,
  (select count(*) as Count2 from Table2) as CountTable2;

Erst wird die Anzahl an Zeilen je Tabelle berechnet, danach erfolgt eine Addition.

Umständlicher mit GROUP BY und dem anfänglichen SELECT:

select (Count1 + Count2) as RowCount
from (
  select Count1, Count2
  from
    ((select count(*) as Count1 from Table1, Table2 group by Table1.Spalte) as CountTable1),
    ((select count(*) as Count2 from Table1, Table2 group by Table2.Spalte) as CountTable2)
  group by Count1
)
as SumTable;
1
Nichtsnutz12 
Fragesteller
 28.08.2020, 02:43
@regex9

Oha voll schwer aber ok danke... bin noch sql Anfänger... haben das Fach nun im Studium...

0
Palladin007  28.08.2020, 10:23
@Nichtsnutz12

Die Frage ist, wozu die Summe der Anzahl beider Tabellen brauchst?
Für mich sieht das wie eine Übung aus, ohne konkreten Bezug.

Produktiv hab ich noch nie die Anzahl von zwei Tabellen summieren müssen :D
Die Anzahl einer Tabelle macht noch Sinn, aber zwei Tabellen?

1