MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 26.08.2018, 14:41   #1
fraeser
MOF Meister
MOF Meister
Standard T-SQL : MSSQL 2008 - NOT IN (SELECT... - keine DS

Hallo,

ich möchte über mehrere Tabellen eine Suche nach NULL durchführen.
Bei einer Tabelle wird mir aber kein Datensatz angezeigt, obwohl einige Tausend die Bedingung erfüllen!

Code:

SELECT Studio_ID
FROM
tbl_Studio
WHERE Studio_ID NOT IN (SELECT Rechnungen_Kundennummer FROM tbl_Rechnungen)
Wie gesagt, bei anderen Tabellen ist das Ergebis korrekt, nur bei tbl_Rechnungen nicht. Spaltenname stimmt.

Irgendeine Idee?

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 26.08.2018, 16:14   #2
hcscherzer
MOF Guru
MOF Guru
Standard

Was passiert hier:
Code:

SELECT s.Studio_ID
FROM
tbl_Studio s
LEFT JOIN tbl_Rechnungen r ON s.Studio_ID = r.Rechnungen_Kundennummer
WHERE r.Rechnungen_Kundennummer IS NULL
Möglicherweise gibt es in tbl_Studio keine ID, für die es keine Rechnung gibt?

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 26.08.2018, 16:57   #3
fraeser
Threadstarter Threadstarter
MOF Meister
MOF Meister
Standard

Danke Hans-Christian,

mit Deiner sp geht es!
In tbl_Studio gibt es aber definitiv IDs, welche in tbl_Rechnungen nicht vorhanden sind.
Ich habe ja noch ca. 15 weitere Tabellen, die auf NULL/NOT IN zu überprüfen sind. Ursprünglich wollte ich alles mit NOT IN machen. Bei allen (außer Rechnungen) hat das auch funktioniert. An Triggern (for insert; for update) kann es ja auch nicht liegen.
Was ist an dieser Tabelle anders? :-(

Vielen Dank aber schon mal - evtl. baue ich dann alles mit LEFT JOIN um.

Anbei eine erweiterte Frage:
Eine Tabelle hat in der FK-Spalte den Datentyp FLOAT!!! Kommt noch aus der Steinzeit! Keine Ahnung warum. Dort klappt es auch nicht mit NOT IN, trotz Veruch mit CAST/CONVERT. Probiere es aber auch dort per LEFT JOIN.

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 26.08.2018, 18:16   #4
fraeser
Threadstarter Threadstarter
MOF Meister
MOF Meister
Standard

Hallo Hans-Christian,

ich habe jetzt alles per LEFT JOIN gemacht.
Es dauert allerdings wesentlich länger als die "NOT IN"-Methode (jetzt ca. 70 Sekunden bei 9 Tabellen). Spielt aber keine Rolle, da es ein einmaliger Ablauf ist.
Witzigerweise funktioniert mit dem LEFT JOIN auch die Problemtabelle (float), ohne deren FK-Spalte in der sp per CAST oder CONVERT zu behandeln!!!

Danke nochmals und schönen Sonntag noch...

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.08.2018, 11:38   #5
sonic8
MOF Koryphäe
MOF Koryphäe
Standard

Du hast zwar bereits eine Funktionierende Lösung, dennoch die Erklärung, warum der ursprüngliche Ansatz nicht funktioniert hat.

Zitat: von fraeser Beitrag anzeigen

ich möchte über mehrere Tabellen eine Suche nach NULL durchführen.

Auch bei einem Kriteriumsvergleich mit (NOT) IN gilt die Regel, dass NULL-Werte einen exakten Vergleich per Definition nicht erfüllen.

D.h. eine Abfrage ...
Code:

SELECT *
FROM deineTabelle
WHERE Irgendwas IN ('A', 'B', 'C', NULL);
...wird nur die Datensätze mit A, B und C finden, aber keine NULL-Werte, auch wenn diese vorhanden sind.

Diese Logik umgekehrt bedeutet, dass die Abfrage...
Code:

SELECT *
FROM deineTabelle
WHERE Irgendwas NOT IN ('A', 'B', 'C', NULL);
...niemals ein Ergebnis liefern wird, weil der Vergleich mit NULL niemals zutrifft und somit kein Datensatz die mit NOT invertierte Bedingung erfüllt.

__________________

Office / Access 2019: Rückkehr der Symbolleiste?

Geändert von sonic8 (29.08.2018 um 11:41 Uhr).
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.08.2018, 11:47   #6
fraeser
Threadstarter Threadstarter
MOF Meister
MOF Meister
Standard

Alles klar, DANKE für die Aufklärung!
Wieder etwas dazugelernt... :-)

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.08.2018, 14:10   #7
fraeser
Threadstarter Threadstarter
MOF Meister
MOF Meister
Standard

PS:
Wobei es ja bei allen anderen Tabellen (trotzdem) funktioniert!!!
Nur eben diese eine nicht...!?

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.08.2018, 15:50   #8
sonic8
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von fraeser Beitrag anzeigen

PS:
Wobei es ja bei allen anderen Tabellen (trotzdem) funktioniert!!!
Nur eben diese eine nicht...!?

Dann hat bei den funktionierenden Abfragen die Unterabfrage keine NULL-Werte in der Ergebnismenge gehabt.

__________________

Office / Access 2019: Rückkehr der Symbolleiste?
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 29.08.2018, 15:54   #9
fraeser
Threadstarter Threadstarter
MOF Meister
MOF Meister
Standard

DOCH, hatte ich doch geschrieben. Definitiv!

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 01.09.2018, 17:20   #10
sonic8
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von fraeser Beitrag anzeigen

DOCH, hatte ich doch geschrieben. Definitiv!

Es fällt mir schwer das zu glauben. Ohne ein konkretes, reproduzierbares Beispiel lässt sich aber nicht viel dazu sagen.

__________________

Office / Access 2019: Rückkehr der Symbolleiste?
sonic8 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 03.09.2018, 11:39   #11
fraeser
Threadstarter Threadstarter
MOF Meister
MOF Meister
Standard

Noch mal zu Deiner Aufklärung aus #5:
Die Abfrage innerhalb der Klammer liefert niemals NULL. Es werden dort nur alle Kunddenummern aus einer Tabelle selektiert).

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 03.09.2018, 20:53   #12
Josef P.
MOF Guru
MOF Guru
Standard

Hallo!

Es spielt keine Rolle, ob die Select-Anweisung der In-Anweisung Null liefert.
Null-Werte werden bei einem Vergleich nicht eingeschlossen (egal ob In(..), = oder like)

Wenn du Nullwerte benötigst, ist "is null" erforderlich.
Code:

select ..
from Tabelle
where Feld not in (....) or Feld is null
mfg
Josef
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.09.2018, 11:04   #13
fraeser
Threadstarter Threadstarter
MOF Meister
MOF Meister
Standard

Hallo,

habe das Problem nun erkannt.
Durch eine Wiederherstellung der SQL-DB sind in der Tabelle tbl_Rechnungen wieder DS mit Rechnungen_Kundennummer = NULL vorhanden. Vorher hatte ich das alles bereinigt. Entweder bereinige ich das wieder, dann läuft die Abfrage aus #1 wieder.
Oder ich schließe NULL gleich aus.

Code:

SELECT Studio_ID
FROM
tbl_Studio
WHERE Studio_ID NOT IN (SELECT Rechnungen_Kundennummer FROM tbl_Rechnungen WHERE Rechnungen_Kundennummer IS NOT NULL)
Mit den anderen Tabellen lief es problemlos > weil diese schon alle bereinigt waren.

Vielen Dank für Eure Hilfe!

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.09.2018, 11:48   #14
Josef P.
MOF Guru
MOF Guru
Standard

Hallo!

Noch als Ergänzung:
Wenn du not exists verwendest, stören Null-Werte im Subselect nicht.

Code:

SELECT Studio_ID
FROM tbl_Studio S
WHERE not exists (
    SELECT *
    FROM tbl_Rechnungen R 
    where R.Rechnungen_Kundennummer = S.Studio_ID
)

Anm: Beitrag #12 von mir ist zum Ignorieren - dachte in die falsche Richtung.

mfg
Josef

Geändert von Josef P. (04.09.2018 um 12:06 Uhr).
Josef P. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.09.2018, 12:14   #15
fraeser
Threadstarter Threadstarter
MOF Meister
MOF Meister
Standard

Ja, EXISTS wäre die dritte Variante.

Hier ist es einfaches Beispiel mit den 3 Vergleichen...

http://www.mwegner.de/php-sql/left-j...ot-exists.html

__________________

Gruß, Jan

Zitat:

Programmieren und Microsoftail: "Gestern stand ich noch am Abgrund.....heute bin ich einen Schritt weiter....!"

fraeser ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.