Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL ADS und ungleich (https://www.delphipraxis.net/123457-sql-ads-und-ungleich.html)

nahpets 3. Nov 2008 11:24

Re: SQL ADS und ungleich
 
Zitat:

Zitat von Grolle
SQL-Code:
SELECT * FROM CONTACTS LEFT JOIN PROJECTS_TO_CONTACTS ON CONTACTS.ID = PROJECTS_TO_CONTACTS.CONTACT_ID
WHERE ((PROJECTS_TO_CONTACTS.PROJECT_ID<>4) OR (PROJECTS_TO_CONTACTS.PROJECT_ID IS NULL))

Versuchmal dieses:
SQL-Code:
SELECT * FROM CONTACTS LEFT JOIN PROJECTS_TO_CONTACTS ON CONTACTS.ID = PROJECTS_TO_CONTACTS.CONTACT_ID
WHERE ((not (PROJECTS_TO_CONTACTS.PROJECT_ID=4)) OR (PROJECTS_TO_CONTACTS.PROJECT_ID IS NULL))
oder:
SQL-Code:
SELECT * FROM CONTACTS LEFT JOIN PROJECTS_TO_CONTACTS ON CONTACTS.ID = PROJECTS_TO_CONTACTS.CONTACT_ID
WHERE ((PROJECTS_TO_CONTACTS.PROJECT_ID not in(4)) OR (PROJECTS_TO_CONTACTS.PROJECT_ID IS NULL))
Der Vergleich auf <> funktioniert bei einigen Datenbanken nicht ordentlich, wenn von ihm auch Spalten mit Null-Werten betroffen sind.
Hast Du bei Deiner Datenbank eine IsNull- oder IfNull-Funktion? Dann könnte Dir auch sowas helfen:
SQL-Code:
SELECT * FROM CONTACTS LEFT JOIN PROJECTS_TO_CONTACTS ON CONTACTS.ID = PROJECTS_TO_CONTACTS.CONTACT_ID
WHERE ((IsNull(PROJECTS_TO_CONTACTS.PROJECT_ID,-1) <> 4))
Hoffe, dass ich Dein Problem verstanden habe und nicht jetzt den Lösungsansatz für ein anderes Problem liefere.

gmc616 3. Nov 2008 11:46

Re: SQL ADS und ungleich
 
Nur so als Idee:
Warum setzt du nicht PROJECT_ID auf default not null bzw. default -1 ?

:hi:

Grolle 3. Nov 2008 12:06

Re: SQL ADS und ungleich
 
Hallo,

ich zitier mich mal:

Zitat:

Zitat von Grolle
Jetzt möchte ich alle CONTACTS, die nicht dem PROJECT 4 zugeordnet sind, oder 0 sind und auch nicht in dem
Ergebnis der ersten Abfrage auftauchen (das passiert in den obigen Tabellen z. B. mit CONTACT_ID 2. Dieser
ist mehreren Projekten zugeordnet).
Bisher sieht die Abfrage da so aus:
SQL-Code:
SELECT * FROM CONTACTS LEFT JOIN PROJECTS_TO_CONTACTS ON CONTACTS.ID = PROJECTS_TO_CONTACTS.CONTACT_ID
WHERE ((PROJECTS_TO_CONTACTS.PROJECT_ID<>4) OR (PROJECTS_TO_CONTACTS.PROJECT_ID IS NULL))

Nur der im Zitat fett markierte Teil funktioniert nicht!. Ansonsten funktioniert die Abfrage einwandfrei!

Viele Grüße ...

joachimd 3. Nov 2008 12:31

Re: SQL ADS und ungleich
 
Zitat:

Zitat von Grolle
Jetzt möchte ich alle CONTACTS, die nicht dem PROJECT 4 zugeordnet sind, oder 0 sind und auch nicht in dem
Ergebnis der ersten Abfrage auftauchen (das passiert in den obigen Tabellen z. B. mit CONTACT_ID 2. Dieser
ist mehreren Projekten zugeordnet).

SQL-Code:
select a.* from #contacts a
where a.id not in (select b.contact_id from #projects_to_contacts b where b.project_id=4 )

Grolle 3. Nov 2008 15:38

Re: SQL ADS und ungleich
 
Hallo Joachim,

ich bekommme da eine Fehlermeldung, das er die Tabelle nicht findet?:
Zitat:

poQuery: Error 7200: AQE Error: State = HY000; NativeError = 7112; [iAnywhere Solutions][Advantage SQL][ASA] Error 7112: The temporary table cannot be found. Table name: #contacts
Viele Grüße ...

// Edit. Ich glaub so geht's:
SQL-Code:
select a.* from contacts as a
where a.id not in (select b.contact_id from projects_to_contacts as b where b.project_id=4 )

Union 3. Nov 2008 18:59

Re: SQL ADS und ungleich
 
Er hat wahrscheinlich die Testdaten in temporären Tabellen angelegt (Präfix #). ADS löscht solche Tabellen beim Schließen der DB-Connection automatisch.

Grolle 3. Nov 2008 19:45

Re: SQL ADS und ungleich
 
Hi,

Zitat:

Zitat von Union
Er hat wahrscheinlich die Testdaten in temporären Tabellen angelegt (Präfix #). ADS löscht solche Tabellen beim Schließen der DB-Connection automatisch.

wieder was gelernt. Auf jeden Fall klappt's jetzt. Danke euch allen!

:cheer: :dp: :cheer:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr.
Seite 3 von 3     123   

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