fizzo361
Goto Top

Hilfe bei SQL-Abfrage, schwierigkeiten bei der Where-Klausel Bildung

Hallo Forum,

ich habe gerade ein Problem in meiner MySQL Datenbank, ich muss dazu sagen ich das mich auch sehr schwer tue mit den SQL-Abfragen ;)
Ich hoffe ihr Könnt mir Helfen (Y)

Ich habe folgende Tabelle:
SELECT TOP (1000) [Address]
,[Thumbprint]
,[IsActiveEncryptionKey]
,[IsActiveSigningKey]
,[KeyType]
FROM [NoSpamProxyDB].[UserManagement].[CryptographicKey]

Ausgabe:
Adress:; Thumbprint; IsActiveEncryptionKey ; IsActiveSigningKey ; KeyType;
a.MAX@MAX.de; 5978C1FEAE2394DB0D54CD1BF1094F10187B0411; 0; 0; 1;
a.MAX@MAX.de; E80CA142297118C35B14C73798699E5BDE92563D; 1 ; 1 ; 1;
a.MUSTERz@MUSTER.com ; 51B6845CB53544455CD626014336FE925708DFA6 ; 1 ; 1 ; 1 ;
a.MUSTER@MUSTER.com ; BB31E2467793D56965A3E316E1F4E2B726CDC551 ; 0 ; 0 ; 1;
a.MANN@MANN.net ; 3C6C242D4D4D01C80CA109696CFD50DE86053C19 ; 1 ; 1 ; 1 ;
In dieser Ausgabe sehe ich E-Mail Adressen mit AbgelaufenenZertifikaten ( Datensätze die 0; 0; 1 als Zahlenwert haben), sowie Aktive/Folge Zertifikate also Verlängerungen (Datensätze die 1; 1; 1 als Zahlenwert haben).

Genau so gibt es aber auch User die aktuell kein gültiges Zertifikat haben:
Adress; Thumbprint; IsActiveEncryptionKey; IsActiveSigningKey ; KeyType;
berlin@Olaf.de ; BA74C641EAC02C0CD268E5226CC6C213EC3415EB ; 0 ; 0 ; 1;
berlin@Olaf.de ; D34752BBCC6CF2C6E011E4A564224BCCFF2AB956 ; 0 ; 0 ; 1;
hier sieht man das Berlin@Olaf.de zwei abgelaufene Zertifikate besitzt und kein Aktives Zertifkakt.

Ich benötige für die Obige SQL-Abfrage eine passende Where-Klausel die mir nur die E-Mail-Adressen / Benutzer ausspuckt, welche aktuell kein gültiges Zertifakt haben.
Also als Bsp. Ergebnis bei den oben genannten Beispiel-Daten dürfte ich nur die Berlin@Olaf.de erhalten, weil alle andern haben ja bereits ein folge Zertifikat.

Über eure Hilfe wäre ich sehr dankbar.
Vielen Dank im vorraus und Gruß
Fizzo361

Content-ID: 588529

Url: https://administrator.de/contentid/588529

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

Doskias
Doskias 17.07.2020 um 09:07:56 Uhr
Goto Top
Du schreibst doch schon selbst wie die Bedingung aussehen muss, wenn ich dich richtig verstanden habe.


Zitat von @Fizzo361:
In dieser Ausgabe sehe ich E-Mail Adressen mit AbgelaufenenZertifikaten ( Datensätze die 0; 0; 1 als Zahlenwert haben)

und genau das packst du jetzt in deine where-Bedingung sprich:

where [IsActiveEncryptionKey]=0 and [IsActiveSigningKey]=0

[KeyType] kannst du weglassen, weil dieser ja in beiden Fällen 1 ist.

Das sollte es dann schon gewesen sein.
Fizzo361
Fizzo361 17.07.2020 um 09:15:42 Uhr
Goto Top
Hallo Doskias,

vielen Dank für deine Hilfe, leider passt es mit dieser Where-Klausel nicht weil die Abhänigkeit fehlt:
Wenn ich deine Where-klausel einsetzte erhalte ich folgende Werte zurück:

a.MAX@MAX.de; 5978C1FEAE2394DB0D54CD1BF1094F10187B0411; 0; 0; 1;
a.MUSTER@MUSTER.com ; BB31E2467793D56965A3E316E1F4E2B726CDC551 ; 0 ; 0 ; 1;
berlin@Olaf.de ; BA74C641EAC02C0CD268E5226CC6C213EC3415EB ; 0 ; 0 ; 1;
berlin@Olaf.de ; D34752BBCC6CF2C6E011E4A564224BCCFF2AB956 ; 0 ; 0 ; 1;

Dies ist jedoch nicht hilfreich weil es noch ja die Folge Zertifikate gibt also es gibt ja noch diese Datensätze in der Tabelle:
a.MAX@MAX.de; E80CA142297118C35B14C73798699E5BDE92563D; 1 ; 1 ; 1;
a.MANN@MANN.net ; 3C6C242D4D4D01C80CA109696CFD50DE86053C19 ; 1 ; 1 ; 1 ;

Und ich möchte ja nur wissen welcher User hat aktuell kein gültiges bzw. Aktives Zertifikat.

Also das erhoffe Ergebnis dürfte nur folgendes sein:
berlin@Olaf.de ; BA74C641EAC02C0CD268E5226CC6C213EC3415EB ; 0 ; 0 ; 1; weil zum Benuzter Berlin@Olaf.de keinen weiteren Eintrag mit der Zahlenfolge 1,1,1 gibt.

Ich hoffe daduch wurde mein Anliegen verständlicher.
Danke und Gruß
Fizzo361
em-pie
em-pie 17.07.2020 um 09:27:11 Uhr
Goto Top
Moin,

dann musst du mit GROUP BY und HAVING MAX(IsActiveSigningKey ) = 0 arbeiten

PS: Nutze bitte mal die Code-Tages hier (ohne die Leerzeichen):
< code >
mein Code
< /code >

Gruß
em-pie
it-frosch
Lösung it-frosch 17.07.2020 aktualisiert um 09:28:04 Uhr
Goto Top
Hallo Fizzo361,

SELECT TOP (1000) [Address]
,[Thumbprint]
,[IsActiveEncryptionKey]
,[IsActiveSigningKey]
,[KeyType]
FROM [NoSpamProxyDB].[UserManagement].[CryptographicKey] 
where ([IsActiveSigningKey]=0 and [IsActiveSigningKey]=0) 
and [Addresse] not in (select [Addresse] from  [NoSpamProxyDB].[UserManagement].[CryptographicKey]  where ([IsActiveSigningKey]=1)
Erklärung:
Du lässt dir alle Datensätze ausgeben die nur [IsActiveSigningKey]=0 haben.
Mit dem "not in" Filter schließt du alle aus die ein verlängertes Zertifikat haben und aus diesem Grund für das abgelaufene Zertifikat in der ersten Abfrage auch einen Treffer liefern würden.

grüße vom it-frosch

PS: kann sein, dass die Syntax nicht 100%ig korrekt ist. face-wink
Fizzo361
Fizzo361 17.07.2020 um 09:37:27 Uhr
Goto Top
Super vielen Dank (Y) das passt 100% und danke für die Erklärung.
Gruß
Fizzo361