2017-06-27 5 views
-2

Ich versuche, eine Abfrage zu finden, die alle Personen zurückgibt, einschließlich der Firma, der sie angehören, und Firmen, die noch keine Person zugewiesen haben.MYSQL - Zeile auswählen, selbst wenn Zeile nicht beitreten

Firma

cid | cname 
-------------- 
1  Company 1 
2  Company 2 

Person

pid | pname  | fk_company 
--------------------------- 
1  Person 1 1 
2  Person 2 1 

gewünschte Ergebnis

pid | pname | fk_company | cid | cname  
---------------------------------------------- 
1  Person 1 1   1  Company 1 
2  Person 2 1   1  Company 1 
NULL NULL  NULL   2  Company 2 

Vielen Dank im Voraus

+7

Zeigen Sie uns Ihre Versuche, wir machen Ihre Arbeit nicht für Sie. Tipp: Verwenden Sie 'LEFT JOIN'. [ask] – HoneyBadger

+1

Beginnen Sie also mit "Company" und "LEFT JOIN" den anderen. Übrigens müssen Sie 'FULL JOIN' verwenden, wenn Sie sowohl alle Firmen als auch alle Personen haben wollen. – HoneyBadger

+0

Wenn ich eine Lösung hätte, die nahe an dem ist, was ich möchte, dann hätte ich es aufgenommen. Aber ich nicht. Mit einem einfachen linken Join (SELECT * FROM Person LEFT JOIN Firma ON person.fk_company = company.cid) bekomme ich alle Leute einschließlich der Firma, der sie angehören, aber dann vermisse ich die Firmen, die keine Person zugewiesen haben. Also denke ich, dass ich eine weitere Verbindung hinzufügen muss, aber ich kann seine Bedingungen nicht herausfinden. Mit einem Cross-Join bekomme ich ziemlich viele Ergebnisse. Nun, ich könnte sie später aussortieren, aber ich denke, das wird ziemlich viel Leistung benötigen. Ich hoffe, dass es eine elegante Lösung gibt, die ich nicht sehen kann ... – Michael

Antwort

1

Wenn Sie alles aus beiden Tabellen wollen, links unabhängig von Spiel und rechts, müssen Sie ein FULL JOIN:

SELECT * 
FROM  person 
FULL JOIN company 
     ON person.fk_company = company.cid 

bearbeiten: Offenbar hat mysql nicht FULL JOIN unterstützen. Sie müssen sowohl LEFT JOINS von Hand und UNION ALL sie tun.

0

Sie sollten etwas erwähnen, das Sie ausprobiert haben. Wie auch immer, ich werde die Methode erklären, damit Sie daran arbeiten können.

SELECT <column_names>FROM <table1_name> LEFT JOIN <table2_name>ON 
<table1.column_name> = <table2.column_name>; 

Weitere Erläuterungen finden Sie unter diesem Link. SQL Left Join

Verwandte Themen