mysql如何对同一个表进行内部连接和第二个内部连接?

mysql如何对同一个表进行内部连接和第二个内部连接?,mysql,sql,join,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/

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

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'
这就行了,我得到了一个合理的注释列表,只针对当前在employees表中的员工(例如,上面只有abc-记录2和3)

现在,我只需要返回记录3,因为它是一个“N”记录,并且没有相同日期和客户机的匹配“Y”记录

我似乎无法找到额外的部分来添加它


谢谢。

为此尝试使用工会。通过这种方式,您可以处理两个不同的查询。

尝试为此使用联合。通过这种方式,您可以处理两个不同的查询。

如果将
标志=
表达式移动到
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中改进的别名。

如果将
标志=
表达式移动到
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借用了改进的别名。

为什么不删除
WHERE
子句中的
标志
条件?这不就是你想要的吗?我只是稍微澄清了一下,我尝试了下面的查询,但它们不起作用,所以我认为我之前的解释不清楚。为什么不删除
WHERE
子句中的
标志
条件呢?这不就是你想要的吗?我只是澄清了一点,我尝试了下面的查询,但它们不起作用,所以我认为我之前的解释不清楚。