Mysql 自连接未提供准确数据
Mysql self join not giving accurate data
我有如下员工 table。
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
我想要使用关键字 Nancy
的 LIKE 查询,它应该 return 结果如下(父记录的名称类似于 Nancy 及其子记录。)。
4081 Nancy Brown 0
4083 Peter Parker 4081
4060 Jane Smith 4081
4061 Bob Hunter 4081
4066 Nancy Smith 0
4061 Bob Smith 4066
尝试使用以下查询,但它是 return 只有子记录,而不是具有 emp_supv
0
的父记录
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%';
尝试使用 if null on join as
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%'
希望对您有所帮助:
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%')
我有如下员工 table。
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
我想要使用关键字 Nancy
的 LIKE 查询,它应该 return 结果如下(父记录的名称类似于 Nancy 及其子记录。)。
4081 Nancy Brown 0
4083 Peter Parker 4081
4060 Jane Smith 4081
4061 Bob Hunter 4081
4066 Nancy Smith 0
4061 Bob Smith 4066
尝试使用以下查询,但它是 return 只有子记录,而不是具有 emp_supv
0
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%';
尝试使用 if null on join as
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%'
希望对您有所帮助:
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%')