Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle (https://www.delphipraxis.net/118414-sql-abfrage-zaehlen-von-n-datensaetzen-aus-2-tabelle.html)

Salomon 7. Aug 2008 11:28

Datenbank: MS SQL • Zugriff über: ADO

SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
Hallo,
ich bräuchte Hilfe bei einer SQL Abfrage. Und zwar habe ich die Tabelle Issues und Attachments. Nun müsste ich in der Ergebnismenge ausgeben ob zu der Issue eine Attachment vorhanden ist. Das folgende SQl funktioniert so leider nicht.

SQL-Code:
select IssueID, i.Name, Attachment = Case When (Select COUNT(*) from TB_IssueAttachetFiles Where a.FK_IssueID = i.IssueID) > 0 then 'Yes'
from tb_issues i;
Das Ergebnis soll später so aussehen:

IssueID Attachment
1 Yes
2
3
4 Yes

Gruß
Marcus

mkinzler 7. Aug 2008 11:33

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
SQL-Code:
select
    IssueID, i.Name,
    Case When (Select COUNT(*) from TB_IssueAttachetFiles Where a.FK_IssueID = i.IssueID) > 0 then 'Yes' else '' end as Attachment
from
    tb_issues i;

nahpets 7. Aug 2008 11:35

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
Hallo,

ist die Syntax so korrekt?
Wie lautet die Fehlermeldung?

SQL-Code:
select IssueID, i.Name, Attachment = Case When (Select COUNT(*) from TB_IssueAttachetFiles Where a.FK_IssueID = i.IssueID) > 0 then 'Yes'
from tb_issues i;
Hätte eher sowas erwartet:

SQL-Code:
select i.IssueID,
            i.Name,
            Case When (Select COUNT(*) from TB_IssueAttachetFiles a Where a.FK_IssueID = i.IssueID) > 0 then 'Yes'
            else 'No'
            end as Attachment
from tb_issues i;
Stephan

PS: und schon wieder ist einer schneller :wink:

omata 7. Aug 2008 11:41

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
SQL-Code:
SELECT IssueID, Name,
       CASE WHEN (SELECT COUNT(*)
                  FROM TB_IssueAttachetFiles
                  WHERE FK_IssueID = i.IssueID) > 0 
          THEN 'Yes'
          ELSE NULL
       END Attachment
FROM tb_issues i
da du die genaue Anzahl ja nicht benötigst...
SQL-Code:
SELECT IssueID, Name,
       CASE WHEN EXISTS (SELECT *
                         FROM TB_IssueAttachetFiles
                         WHERE FK_IssueID = i.IssueID)
          THEN 'Yes'
          ELSE NULL
       END Attachment
FROM tb_issues i

oder auch...
SQL-Code:
SELECT i.IssueID, i.Name, COALESCE('Yes (' + a.anzahl + ')', '') AS Attachment
FROM tb_issues i
LEFT JOIN (SELECT FK_IssueID, COUNT(*) AS anzahl
           FROM TB_IssueAttachetFiles
           GROUP BY FK_IssueID) a
  ON i.IssueID = a.FK_IssueID

omata 7. Aug 2008 11:49

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
...

Salomon 7. Aug 2008 13:24

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
Hey Danke für die ganzen Anworten!

Die Syntax meines SQLs ist nicht korrekt. Hatte ich ganz vergessen zu schreiben, sorry.

mKinzler nutzt ja quasi mein Query mit der richtigen Syntax :) Dann funktionierts auch.

Da ich die Anzahl wirklich nicht brauche müsste omata's Version ohne das Count, schneller sein, oder?

mkinzler 7. Aug 2008 13:37

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
Zitat:

mKinzler nutzt ja quasi mein Query mit der richtigen Syntax Smile Dann funktionierts auch.
Das war auch die Absicht :zwinker:

Salomon 7. Aug 2008 13:45

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
Ich weiß ;) Da war ich ja nah dran^^

Ich nutze jetzt aber omata Version mit dem EXISTS Statement. Das läuft soweit sehr gut.

Scooty78 10. Aug 2008 09:18

Re: SQL Abfrage, Zählen von n Datensätzen aus 2. Tabelle
 
Hat zwar nix mit der eigentlichen Frage zu tun, aber ich versuche grundsätzlich SQLs wir select * from customers oder select count(*) from customers zu vermeiden.
Bei grossen Datenbanken könnte die Performance darunter leiden. Bei einem count bietet sich ein select count(1) from customers an.

Nur so nebenbei!


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz