selectet
Goto Top

SQL - Datenbanken auf Veränderung vergleichen

Hallo,


ich habe zwei Datenbanken(eine von 2021 und eine von 2022), in denen Gebiete einer PLZ zugeordnet werden, z.B.:
| PLZ | Gebiete |
|06870 | Schönebeck |
|29699 | Rotenburg |

Nun möchte ich sehen, welche Gebiete sich zur PLZ von 2021 zu 2022 verändert haben und welche PLZ ein Gebiet zugeordnet bekommen hat.
Mein Problem ist, ich bekomme nur die Gebiete ausgegeben, die sich verändert haben und nicht die wo einer PLZ ein Gebiet zugeordnet wurde.

Mein Code:
SELECT [Gebiete 2022].PLZ, [Gebiete 2021].Gebiet, [Gebiete 2022].Gebiet
FROM
[Gebiete 2022] LEFT JOIN [Gebiete 2021] ON [Gebiete 2022].PLZ = [Gebiete 2021].PLZ
WHERE
[Gebiete 2021].Gebiet= 'Null' and
[Gebiete 2022].Gebiet<>[Gebiete 2021].[Gebiet]
ORDER BY [Gebiete 2021].PLZ;

Hat jemand eine Idee wie ich alles ausgegeben bekomme?

Content-Key: 3378679327

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

Printed on: April 27, 2024 at 01:04 o'clock

Mitglied: 137960
137960 Jul 19, 2022 at 11:09:07 (UTC)
Goto Top
Nur so aus der Hüfte geschossen und ohne dass ich mir das genauer angesehen habe:

Wenn man fehlende Bezüge ermitteln will, muss man meist "RIGHT JOINS" bemühen.
Member: em-pie
Solution em-pie Jul 19, 2022 updated at 11:23:57 (UTC)
Goto Top
Moin,

1. nutze die Code-Tags (=> <#code#> mein Code <#/code#> [nur ohne die Rauten in den eckigen Klammern])

2. Nimm ein FULL OUTER JOIN https://im-coder.com/was-ist-der-unterschied-zwischen-inner-join-und-out ...:
SELECT
  2022.PLZ as PLZ2022 , 2022.GEBIET as GEBIET2022
  , 2021.PLZ as PLZ2022 , 2021.GEBIET as GEBIET2021
FROM [Gebiete 2022] as 2022
FULL OUTER JOIN [Gebiete 2021] as 2021
  on 2022.PLZ = 2021.PLZ
WHERE 2021.GEBIET is NULL OR 2022.GEBIET <> 2021.GEBIET
ORDER BY 2021.PLZ

Dein Fehler war es zudem, dass du ein AND in deine Where Bedingung etabliert hast, du musst aber ein OR nutzen.

Gruß
em-pie
Member: Selectet
Selectet Jul 20, 2022 at 05:56:47 (UTC)
Goto Top
Ich nutze Microsoft Access für die ganze Geschichte und dort gibt er einen Syntaxfehler bei einem OUTER JOIN. Würde dir noch eine Alternative einfallen oder sollte ich ein anderes DB-Software nutzen?
Member: em-pie
Solution em-pie Jul 20, 2022 at 06:59:57 (UTC)
Goto Top
Moin,

die Info mit Access wäre im Ausgangspost ganz hilfreich gewesen face-wink

Probiere es einmal wie hier bescrieben: http://www.office-loesung.de/ftopic52680_0_0_asc.php

Es werden insgesamt zwei Queries benötigt, einmal mit einem LEFT JOIN und einmal mit einem RIGHT JOIN. Anschließend werden ebendiese mit einem UNION ALL aneinander gehangen.
Member: Selectet
Selectet Jul 20, 2022 at 07:47:53 (UTC)
Goto Top
Moin,

sorry :D

ich habe das mal ausprobiert und das ganze sieht so bei mir aus.
Allerdings bekomme ich immer noch nur die Gebiete ausgegeben, die sich verändert habe und nicht die, die ein Gebiet erhalten haben.

SELECT [Gebiete 2022].PLZ, [Gebiete 2021].Standort, [Gebiete 2022].Standort
FROM 
   [Gebiete 2022] LEFT JOIN [Gebiete 2021] ON [Gebiete 2022].PLZ = [Gebiete 2021].PLZ
WHERE
   [Gebiete 2021].Standort = '' or   
   [Gebiete 2022].Standort<>[Gebiete 2021].[Standort]
UNION
SELECT [Gebiete 2022].PLZ, [Gebiete 2021].Standort, [Gebiete 2022].Standort
FROM 
   [Gebiete 2022] RIGHT JOIN [Gebiete 2021] ON [Gebiete 2022].PLZ = [Gebiete 2021].PLZ
WHERE
   [Gebiete 2021].Standort = '' or   
   [Gebiete 2022].Standort<>[Gebiete 2021].[Standort]
Member: em-pie
em-pie Jul 20, 2022 at 07:51:33 (UTC)
Goto Top
Naja... ein '' ist etwas anderes als ein NULL
Member: Selectet
Selectet Jul 20, 2022 at 08:12:03 (UTC)
Goto Top
Mit NULL kommt auch das gleiche bei raus. Ich würde mich mal eher nach einer anderen DB-Software umsehen. Sind gute kostenloste Alternativen bekannt? face-smile
Mitglied: 137960
137960 Jul 21, 2022 at 07:49:02 (UTC)
Goto Top
Zitat von @Selectet:

Mit NULL kommt auch das gleiche bei raus. Ich würde mich mal eher nach einer anderen DB-Software umsehen. Sind gute kostenloste Alternativen bekannt? face-smile

Ja.
Member: Selectet
Selectet Jul 21, 2022 at 07:59:00 (UTC)
Goto Top
Ich bin auf MySQL Workbench umgestiegen und jetzt funktioniert auch alles.
Danke für die Hilfe! face-smile
Member: ukulele-7
ukulele-7 Jul 26, 2022 at 11:43:53 (UTC)
Goto Top
Zitat von @Selectet:

Mit NULL kommt auch das gleiche bei raus. Ich würde mich mal eher nach einer anderen DB-Software umsehen. Sind gute kostenloste Alternativen bekannt? face-smile

MS SQL Express (SSMS kann auch Access MDBs abfragen) oder PostgreSQL.

Vergleichen ließe sich das noch mit EXCEPT falls Access das beherrscht, etwa so:
SELECT *
FROM [Gebiete 2022]
EXCEPT
SELECT *
FROM [Gebiete 2021]
UNION ALL
SELECT *
FROM [Gebiete 2021]
EXCEPT
SELECT *
FROM [Gebiete 2022]