SQL 2 Tabellen miteinander vergleichen und nicht benutzte Werte anzeigen lassen
Hallo zusammen,
ich würde gerne über Powershell Script, aus 2 SQL Tabellen werte vergleichen und die anzeigen lassen, die nicht benutzt werden.
Beispiel.
E-Mail Regel erste Tabelle wo alles angezeigt wird:
id:
1
2
3
4
5
6
7
8
9
10
E-Mail Regel 2 Tabelle wo nur benutze Regeln angezeigt werden:
regel_id:
1
4
6
9
10
Ergebnis soll sein, wo nur die nicht benutzten angezeigt werden.
2
3
5
7
8
Ich hoffe, das ist verständlich, was ich meine, weil ich es irgendwie nicht hinbekomme.
Wäre für eure Lösungsansätze dankbar.
Bin leider noch ein Anfänger in PowerShell Scripten.
Vielen Dank euch zusammen schonmal vorab.
LG
Kratos
ich würde gerne über Powershell Script, aus 2 SQL Tabellen werte vergleichen und die anzeigen lassen, die nicht benutzt werden.
Beispiel.
E-Mail Regel erste Tabelle wo alles angezeigt wird:
id:
1
2
3
4
5
6
7
8
9
10
E-Mail Regel 2 Tabelle wo nur benutze Regeln angezeigt werden:
regel_id:
1
4
6
9
10
Ergebnis soll sein, wo nur die nicht benutzten angezeigt werden.
2
3
5
7
8
Ich hoffe, das ist verständlich, was ich meine, weil ich es irgendwie nicht hinbekomme.
Wäre für eure Lösungsansätze dankbar.
Bin leider noch ein Anfänger in PowerShell Scripten.
Vielen Dank euch zusammen schonmal vorab.
LG
Kratos
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6151335970
Url: https://administrator.de/contentid/6151335970
Ausgedruckt am: 22.11.2024 um 01:11 Uhr
9 Kommentare
Neuester Kommentar
SELECT id
FROM table1
WHERE Number NOT IN (SELECT id FROM table2)
PowerShell oder SQL? Du kannst die Query wie oben ja da reindrücken und bekommst als Objekt das Ergebnis zurück.
Oder 2x Queries die 2x PowerShell Objekte füllen, die man dann vergleicht. Eig. reicht das oben bei SQL vollkommen und wir überlassen das Denken dem Pferd.
Nun zeig aber erstmal deine SQL Query in PS ....
Es gibt versch JOIN Typen.
Was hat bei verschachtelten SELECT nicht geklappt? In dem Fall heisst es, es darf keine id dann vorhanden sein. Unbenutzte IDs die so aussehen - ID 5 = "LEER", ID 6 = "LEER" geht nicht, da die ja vorhanden sind. Es würden dann alles oder nichts raus kommen - IN / NOT IN.
Wenn die 1 Tabelle da Lücken hat, sollte es gehen. Kommt nur nichts raus oder gibt es eine Fehlermeldung?
PS: Vergiss erstmal PowerShell. Geh an SQL mit z.B. MS SQL Management Konsole oder eine vergleichbare - je nach DB Hersteller - heran. Teste die Query in SQL. Stimmen die Werte holst Du sie dir via PS raus.
Was hat bei verschachtelten SELECT nicht geklappt? In dem Fall heisst es, es darf keine id dann vorhanden sein. Unbenutzte IDs die so aussehen - ID 5 = "LEER", ID 6 = "LEER" geht nicht, da die ja vorhanden sind. Es würden dann alles oder nichts raus kommen - IN / NOT IN.
Wenn die 1 Tabelle da Lücken hat, sollte es gehen. Kommt nur nichts raus oder gibt es eine Fehlermeldung?
PS: Vergiss erstmal PowerShell. Geh an SQL mit z.B. MS SQL Management Konsole oder eine vergleichbare - je nach DB Hersteller - heran. Teste die Query in SQL. Stimmen die Werte holst Du sie dir via PS raus.
Zitat von @Kratos:
hier select 1(hier werden regeln angezeigt welche benutzt werden und wie oft):
"SELECT er.id, er.rule_key, er.rule_match, er.match_value, ma.mapped_recipient, ma.egvp_rule_id,Count(*)zeahler FROM egvp_rule er INNER JOIN maillog ma ON er.id = ma.egvp_rule_id group by egvp_rule_id"
Der Select ist syntaktisch falsch und sollte von jeder aktuellen Datenbank mit einem Fehler quittiert werden. Das könnte der Grund sein warum das "nicht geklappt" hat. Wobei es schon ein großer Unterschied ist ob eine Abfrage einen Fehler wirft oder nicht die erwarteten Daten raus kommen.hier select 1(hier werden regeln angezeigt welche benutzt werden und wie oft):
"SELECT er.id, er.rule_key, er.rule_match, er.match_value, ma.mapped_recipient, ma.egvp_rule_id,Count(*)zeahler FROM egvp_rule er INNER JOIN maillog ma ON er.id = ma.egvp_rule_id group by egvp_rule_id"
Du musst übrigens bei einem GROUP BY im SELECT-Teil immer aggregieren oder gruppieren, daher der offensichtliche Syntax-Fehler. Gruppieren ist vermutlich auch völlig überflüssig an der Stelle.
hier select 2 hier einfach alle regeln:
"SELECT id, rule_key, rule_match, match_value From egvp_rule;"
ich will das nur die nicht benutzten angezeigt werden am besten über if, Foreach oder so.
Das über Powershell zu machen ist völliger Quatsch. Die Informationen sind alle direkt in einer SQL DB und SQL ist genau für solche Abfragen gemacht.reicht das für Verständnis?
Wenn ich jetzt mal in meine Glaskugel schaue dann suchst du vermutlich das hierSELECT er.id,
er.rule_key,
er.rule_match,
er.match_value
FROM egvp_rule er
LEFT JOIN maillog ma
ON er.id = ma.egvp_rule_id
WHERE ma.egvp_rule_id IS NULL
Geht natürlich auch anders, z.B. mit NOT IN. Aber Joins sind eigentlich immer besser als Subquerys.
Moin,
Fehlermeldungen sollten gelesen und verstanden werden
Wenn ich mir dein Script oben anschaue, weiß ich genau, was dein Problem war.
Das geht:
Das wiederum geht nicht:
Wenn du mit JOINS arbeiten willst:
https://commons.wikimedia.org/wiki/File:SQL_Joins.svg
Fehlermeldungen sollten gelesen und verstanden werden
Vielleicht habe ich das falsch eingesetzt oder kann es sein das es mit join oder group by Probleme hat ?
Wenn ich mir dein Script oben anschaue, weiß ich genau, was dein Problem war.
Where id not in (SELECT ... FROM ...)
: In dem Subselect, innerhalb des NOT IN darfst du nur eine Spalte - die ID - angeben:Das geht:
SELECT id, col1, col2, col3
FROM myTable
WHERE id NOT IN (SELECT id from otherTable)
Das wiederum geht nicht:
SELECT id, col1, col2, col3
FROM myTable
WHERE id NOT IN (SELECT id, Field1 from otherTable)
Wenn du mit JOINS arbeiten willst:
SELECT mytable.id, mytable.col1, mytable.col2, mytable.col3, otherTable.Field1
FROM myTable
FULL OUTER JOIN otherTable on myTable.id = otherTable.id
WHERE myTable.id IS NULL OR otherTable.id IS NULL
https://commons.wikimedia.org/wiki/File:SQL_Joins.svg