mysql如何使用第二个内连接到同一个表进行内连接?

时间:2012-02-02 18:05:14

标签: mysql sql join

我有两张桌子,一张带笔记

id, note, client#, flag, employee#, date

另一位与员工

id, employee#

我想查找所有带有“N”标志的注释,但是对于同一日期和客户端#没有“Y”标志,但仅适用于employee表中的员工。

例如我从:

开始
1  mynote   123   Y   abc   1/1/2011
2  mynote   123   N   abc   1/1/2011
3  mynote   124   N   abc   1/1/2011
4  mynote   124   N   ccc   1/1/2011

(在我的员工表中,我有员工abc)

所以我开始:

SELECT * from notes a inner join employees b on a.employee = b.employee WHERE a.flag = 'N'

这很有效,我只为当前在员工表中的员工(例如,只有abc - 上面的记录2和3)获得了一个合理的注释列表。

现在,我需要仅回溯记录3,因为它是一个“N”记录,并且在同一日期和客户#上没有匹配的“Y”记录。

我似乎无法让额外的部分想出来添加它。

感谢。

2 个答案:

答案 0 :(得分:1)

尝试使用联合。这样您就可以使用2个不同的查询。

答案 1 :(得分:0)

如果将flag =表达式移到ON子句,它会变得更简单:

SELECT * from employees e
inner join notes n1
on n1.employee = e.employee
  AND n1.flag = 'N'
inner join notes n2
ON n2.employee = e.employee
  AND n2.client = n1.client AND n2.date = n1.date AND n2.flag = 'Y'

我还从dasblinkenlight借用了改进的别名。