Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Sql: Join mit NULL oder ID

Empfohlene Antworten

Veröffentlicht

Folgende Frage, ich möchte aus mehreren Tabellen die Inhalte zusammen führen, jedoch habe ich eine Spalte mit einer AdminID, die entweder Null oder eine spezielle ID sein kann.

Falls diese Spalte Null ist, sollen die Daten des Admins auch Null sein.

Leider sind in der Ergebnismenge bei einer Null-ID immer alle Kombinationen des jeweiligen Eintrags mit ALLEN Admins vorhanden, was jedoch vermieden werden soll.

Aktuelles SQL Statement:

SELECT * 

FROM ticket AS t, ticketkat AS tk, ticketstat AS ts, product AS p, admin AS adm, reader AS r

WHERE t.TicketKat_idTicketKat = tk.idTicketKat

AND t.TicketStat_idTicketStat = ts.idTicketStat

AND t.Product_idProduct = p.idProduct

AND r.Ticket_idTicket = t.idTicket

AND (

t.Admin_idAdmin IS NULL 

OR t.Admin_idAdmin = adm.idAdmin

)
Ergebnis:
Admin_idAdmin: NULL | idAdmin: 1 | Nickname: Shadowman

Admin_idAdmin: 1    | idAdmin: 1 | Nickname: Shadowman

Admin_idAdmin: 1    | idAdmin: 1 | Nickname: Shadowman

Admin_idAdmin: NULL | idAdmin: 2 | Nickname: Shadowman_Test
gewünschtes Ergebnis:
Admin_idAdmin: NULL | idAdmin: NULL | Nickname: NULL

Admin_idAdmin: 1    | idAdmin: 1    | Nickname: Shadowman

Admin_idAdmin: 1    | idAdmin: 1    | Nickname: Shadowman

Hat da jemand eine Idee, wie dies realisiert werden kann?

Mfg Shadowman

Bearbeitet von Shadowman

Du könntest natürlich da mit IF(id==NULL,nickname=NULL,nickname) einzeln durchpreschen also zu jeder Spalte eine IF-Abfrage.

Aber andere Frage: Was willst du damit wenn da NULL,NULL,NULL drinsteht? Und das ein paar mal. Für mich ist das eine inkonsistente & sinnfreie Abfrage. Weil mit Daten in denen nix drinsteht will ich auch nicht haben. Aber das soll nur ne Frage bzw. Feststellung sein :P

Du möchtest Tabellen zusammenführen, dass heist diese Tabellen müssen ein Verbundfeld haben also die müssen zusammengehören sonst wäre die Zusammenführung ja sinnlos.

Das heist das du da ein schlechtes DB Design hast wenn in einer Spalte die IDs (was eindeutig zugewiesene Werte sein sollten) haben sollte NULL drin stehen kann.

Überdenke dir mal dein DB Design genau, ich denke das zu überarbeiten wäre nicht die schlechteste Idee wenn NULL in einem Id Feld stehen darf.

Gruß lit-web

  • Autor

Sorry, hatte schon länger nicht mehr rein geguckt, weil die Lösung einen Tag später gefunden wurde.

Das ganze wurde mit einem Join gemacht, wodurch die ganze Problematik nicht mehr auftritt. Es soll ja nicht immer ein Wert angefügt werden, sondern nur, wenn dies auch so eingestellt ist. Daher auch die möglichtkeit, dass der Fremdschlüssel NULL sein kann

Ausserdem möchte ich die Tabellen nicht immer verbinden...nur, wenn dies auch möglich ist (daher die NULL Werte)

@Werwolf:

Es geht ganz einfach darum, dass ein Beitrag von einem User einen zugewiesenen Admin hat (die 3 Spalten sind gefüllt), oder halt nicht (die Spalten sind NULL und werden im Script entsprechend verarbeitet)

Sorry, hatte schon länger nicht mehr rein geguckt, weil die Lösung einen Tag später gefunden wurde.

Das ganze wurde mit einem Join gemacht, wodurch die ganze Problematik nicht mehr auftritt. Es soll ja nicht immer ein Wert angefügt werden, sondern nur, wenn dies auch so eingestellt ist. Daher auch die möglichtkeit, dass der Fremdschlüssel NULL sein kann

Ausserdem möchte ich die Tabellen nicht immer verbinden...nur, wenn dies auch möglich ist (daher die NULL Werte)

@Werwolf:

Es geht ganz einfach darum, dass ein Beitrag von einem User einen zugewiesenen Admin hat (die 3 Spalten sind gefüllt), oder halt nicht (die Spalten sind NULL und werden im Script entsprechend verarbeitet)

Wie willst du denn NULL|NULL|NULL verarbeiten?

An deiner Stelle würde ich mir das Datenbankdesign nochmal überdenken. Weil einen NULL-Einträge egal, ob es in einem Gästebuch, Ticketsystem oder Logistiksytemen oder was weiß ich, gibt es nicht.

Leute die noch nix geschrieben oder bestellt haben willst du ja gar nicht haben. Sowas lässt man nicht vom Script abfangen weil das einfach unnötige Zeilen sind.

  • Autor
Wie willst du denn NULL|NULL|NULL verarbeiten?

An deiner Stelle würde ich mir das Datenbankdesign nochmal überdenken. Weil einen NULL-Einträge egal, ob es in einem Gästebuch, Ticketsystem oder Logistiksytemen oder was weiß ich, gibt es nicht.

Leute die noch nix geschrieben oder bestellt haben willst du ja gar nicht haben. Sowas lässt man nicht vom Script abfangen weil das einfach unnötige Zeilen sind.

Du hast es erfasst, es geht um ein Ticketsystem ;)

Du siehst das NULL allerdings bei einer falschen Position. In der Datenbank ist bei jedem Ticket die möglichkeit gegeben, dass dies von einem (und nur einem) Admin übernommen wird. Somit ist es aber auch möglich, dass es bisher von keinem Admin übernommen wurde (FK admin_id in der Ticket Tabelle = NULL)

Einen NULL Wert kann ich in PHP ganz einfach so verarbeiten, dass dort steht:

Zugeteilter Admin: Noch niemand

Bearbeitet von Shadowman

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.