2017-11-22 1 views
1

Also habe ich drei Tabellen, die ich mit einer disjunkten Verbindung erstellen möchte. Dies sind Person, Mieter und Angestellter. Also muss jede Person entweder ein Mieter oder ein Angestellter sein, niemals beides. Ich erstelle eine Person Tabelle mit dem Primärschlüssel PersonID, und Mandant und Mitarbeiter als zwei getrennte Tabellen, deren Primärschlüssel beide Fremdschlüssel sind, die zurück zu der Person (PersonID) verbinden. Wie erstelle ich hier ein Disjoint, wo jede Person nur ein Mieter oder ein Angestellter sein kann? DankWie schreibt man Tabellen in SQL mit einer disjunkten Verbindung?

+0

https://stackoverflow.com/help/mcve - Können Sie einige Beispieldaten bereitstellen und was Sie erwarten, zurückzukehren? Das klingt nach einem einfachen JOIN. – Shawn

+0

Erfahren Sie, wie Sie Fragen stellen können. https://stackoverflow.com/help/how-to-ask – Eric

+0

Bitte ** [EDIT] ** Ihre Frage und fügen Sie einige [Beispieldaten] (http://plaintetxtols.github.io/plain-text-table/) und die erwartete Ausgabe basierend auf diesen Daten. [** Formatierter Text **] (http://stackoverflow.com/help/formatting) bitte, [** keine Screenshots **] (http://meta.stackoverflow.com/questions/285551/why-may -I-nicht-Upload-Bilder-of-Code-auf-so-wenn-eine Frage zu stellen/285557 # 285557). ** [Bearbeiten] ** Ihre Frage - tun ** nicht ** Postleitzahl oder zusätzliche Informationen in Kommentaren. –

Antwort

0

Sie können dies versuchen, die jede Person auswählen wird, die entweder eine Person oder ein Mitarbeiter:

SELECT * 
FROM (SELECT person.*, 
      CASE WHEN employee.id IS NULL THEN 0 ELSE 1 END AS is_employee, 
      CASE WHEN tenant.id IS NULL THEN 0 ELSE 1 END AS is_tenant 
     FROM person LEFT JOIN employee on person.id = employee.id 
        LEFT JOIN tenant on person.id = tenant.id) AS tA 
WHERE tA.is_employee <> tA.is_person 

Vergewissern Sie sich, dass die ID-Spalten alle indiziert sind.

Verwandte Themen