2016-06-22 6 views
1

Ich habe Mitarbeiter Tabelle wie unten.Mysql selbst beitreten nicht geben genaue Daten

emp_id  emp_name   emp_supv 
4081  Nancy Brown   0 
4083  Peter Parker  4081 
4055  Jacob Miller  4083 
4058  Mary Ray   4083 
4060  Jane Smith   4081 
4061  Bob Hunter   4081 
4066  Nancy Smith   0 
4061  Bob Smith   4066 

Ich möchte wie Abfrage mit Schlüsselwort Nancy und es sollte Ergebnis wie unter (übergeordneten Datensatz mit Namen wie Nancy und es ist Kinder Aufzeichnungen.) Zurück.

4081  Nancy Brown  0 
4083  Peter Parker  4081 
4060  Jane Smith  4081 
4061  Bob Hunter  4081 
4066  Nancy Smith  0 
4061  Bob Smith   4066 

versuchen mit Abfrage nach, aber es ist nur untergeordnete Datensätze nicht den übergeordneten Datensatz zurückkehren zu müssen emp_supv0

SELECT sa.id AS id,sa.name AS Name, 
sa2.id AS child_id, sa2.name AS child_name 
FROM employees AS sa LEFT OUTER JOIN employees AS sa2 
ON sa.emp_supv = sa2.emp_id where sa2.emp_name LIKE '%Nancy%'; 
+0

'wo sa2.emp_name LIKE '% Nancy%' oder (sa.emp_supv ist null und sa.emp_name LIKE '% Nancy%')' oder 'wo ifnull (sa2.emp_name, sa.emp_name) LIKE '% Nancy% '' – PetSerAl

Antwort

1

mit versuchen, wenn null auf beitreten als

SELECT sa.emp_id AS id,sa.emp_name AS Name, 
    sa.emp_supv AS child_id, sa2.emp_name AS child_name 
    FROM Employees AS sa 
    LEFT OUTER JOIN employees AS sa2 
    ON case when ifnull(sa.emp_supv,0)=0 then sa.emp_id else sa.emp_supv end= sa2.emp_id 
where sa2.emp_name LIKE '%Nancy%' 
+0

Danke, es funktioniert, wenn Eltern' 'emp_supv'' NULL' ist, aber was ist, wenn es 0 ist, siehe aktualisierte Frage. – Amit

+0

Anwendungsfall, aktualisiert bitte überprüfen – nazark

1

hopte ich diesen Willen Hilfe für Sie:

SELECT DISTINCT a.* FROM employee AS a 
JOIN employee AS b 
ON a.emp_id=b.emp_id 
WHERE a.emp_name LIKE '%nancy%' OR a.emp_supv IN (SELECT emp_id FROM employee WHERE emp_name LIKE '%nancy%')