Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist (https://www.delphipraxis.net/213708-abfrage-soll-true-geben-wenn-name-nicht-da-ist-und-tabelle-nicht-leer-ist.html)

BlueStarHH 12. Sep 2023 15:31

Datenbank: Firebird • Version: 3.x • Zugriff über: IBDAC

Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
Hallo,

ich brauche eine SQL-Abfrage, die true zurückgibt, wenn es in einer Tabelle einen Namen NICHT gibt UND die Tabelle NICHT leer ist. Sonst möchte ich false haben. Ich habe diese Abfrage:

Code:
select count(*) = 0 as res from MyTable where Name like '%XYZ%'
Wie bringe ich den zweiten Part ("UND die Tabelle NICHT leer ist") dort unter?

Uwe Raabe 12. Sep 2023 15:51

AW: Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
Zitat:

Zitat von BlueStarHH (Beitrag 1526809)
wenn es in einer Tabelle einen Namen NICHT gibt

Das LIKE bedeutet aber eigentlich, dass die Zeichenfolge in keinem Name-Feld der Tabelle als Substring auftaucht. Also nicht nur kein 'Meier', sondern auch kein 'Meierling'. Ist das so gewollt?

Delphi.Narium 12. Sep 2023 16:20

AW: Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
Sowas?
SQL-Code:
select (sum(Anzahl) = 0 and sum(leer) <> 0) as res from ( 
  select count(*) as Anzahl, 0 as leer from MyTable where Name like '%XYZ%'
  union all
  select 0 as Anzahl, count(*) as leer from MyTable
)
oder ein bisserl kürzer:
SQL-Code:
select coalesce((select first 1 1 from MyTable where Name like '%XYZ%'),0) = 0 
   and coalesce((select first 1 1 from MyTable),0) <> 0 as Res
from rdb$database

himitsu 12. Sep 2023 18:50

AW: Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
True, wenn irgendwo nicht drin
SQL-Code:
select count(*) > 0 as res from MyTable where not (Name like '%XYZ%')
select count(*) > 0 as res from MyTable where Name not like '%XYZ%'
select distinct true as res from MyTable where Name not like '%XYZ%'
Dann noch die erwähnte sache bezüglich LIKE und %

Sowie, kennt Interbase auch ein iLIKE?
Weil wegen Groß-/Kleinschreibung.
SQL-Code:
select distinct true as res from MyTable where Name not ilike '%XYZ%'
select distinct true as res from MyTable where upper(Name) not like '%XYZ%'

Frickler 13. Sep 2023 18:02

AW: Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
Zitat:

Zitat von himitsu (Beitrag 1526816)
Sowie, kennt Interbase auch ein iLIKE?

Das nicht, aber man kann ja immer COLLATE angeben für "Groß/Klein ignorieren" oder "Akzente ignorieren". Zudem gibt es "CONTAINING", das ist case insensitive:
Code:
select distinct true as res from MyTable where Name not containing 'xyz'

Uwe Raabe 13. Sep 2023 19:08

AW: Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
Zitat:

Zitat von Frickler (Beitrag 1526872)
Zitat:

Zitat von himitsu (Beitrag 1526816)
Sowie, kennt Interbase auch ein iLIKE?

Das nicht

Wieso nicht: https://docwiki.embarcadero.com/Inte.../en/Using_LIKE

BlueStarHH 14. Sep 2023 08:46

AW: Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
Danke an alle, ich mache es jetzt so wie in Beitrag #3 beschrieben. (Das "like" ist hier nicht das Problem. Es ist schon richtig, dass es verwendet wird. Durch Verwendung einer CI-COLLATE ist es auch case insensitive.)

BlueStarHH 14. Sep 2023 08:55

AW: Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
Zitat:

Zitat von himitsu (Beitrag 1526816)
True, wenn irgendwo nicht drin
SQL-Code:
select count(*) > 0 as res from MyTable where not (Name like '%XYZ%')
select count(*) > 0 as res from MyTable where Name not like '%XYZ%'
select distinct true as res from MyTable where Name not like '%XYZ%'

Danke, aber das ist nicht die Lösung für meine Fragestellung. Das Count zählt alle Datensätze, die nicht mit %XYZ% übereinstimmen. Wenn ich nun einen Datensatz mit %XYZ% habe und einen ohne %XYZ%, wird true zurückgegeben. Ich möchte aber prüfen: "Abfrage soll true geben, wenn Name in der gesamten Tabelle nicht exisitert und Tabelle nicht leer ist". Die Lösung steht in Beitrag #3.

himitsu 14. Sep 2023 09:24

AW: Abfrage soll true geben, wenn Name nicht da ist und Tabelle nicht leer ist
 
Mir kam so vor, als wenn es deiner Überschrift entspricht.

True, wenn nicht da und Tabelle nicht leer,
also wenn mindestens ein


OK, kann man auch anders verstehen.
* Anzahl der gibt es Datensätze, wo es nicht drin ist
* ist es überhaupt nicht da, in allen Datensätze


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:49 Uhr.

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