Mysql-Get记录满足where子句中的条件

Mysql-Get记录满足where子句中的条件,mysql,Mysql,请大家帮我写一个关于这个案例的查询。谢谢 表数据 id emp date n1 n2 check ----------------------------- 1 1 Mon 2 1 1 2 1 Sun 1 0 0 3 1 Sat 1 0 0 4 1 Fri 1 0 0 5 2 Mon 2 1 0 6 2 Sun 1 0 0 7 2 Sat

请大家帮我写一个关于这个案例的查询。谢谢

表数据

id  emp date  n1  n2  check 
-----------------------------
1   1   Mon   2   1   1     
2   1   Sun   1   0   0   
3   1   Sat   1   0   0
4   1   Fri   1   0   0
5   2   Mon   2   1   0
6   2   Sun   1   0   0  
7   2   Sat   1   0   0
8   2   Fri   1   0   0
要求: 获取具有
date
Mon
n2
为1且
check
为1的记录。如果有记录,则还显示具有
日期
为(
Sun
Sat
)和
n1
为1的同一员工的记录

那么输出应该是:

id  emp date  n1  n2  check 
-----------------------------
1   1   Mon   2   1   1     
2   1   Sun   1   0   0   
3   1   Sat   1   0   0

您可能需要使用嵌套查询。。在获取单个行之前获取员工ID的列表

SELECT * FROM `tablename`
WHERE `emp` IN (
    SELECT `emp` FROM `tablename`
    WHERE `date` = "Mon" AND `n2` = 1 AND `check` = 1 GROUP BY emp
) AND (
    (`date` = "Mon") OR 
    (`date` IN ("Sat", "Sun") AND `n1` = 1)
)

或者,您可以分别运行两个查询,以简化有关
Mon/Sat/Sun
n1
部分的逻辑,并自行合并两个结果数组。

您要查找的是同一表上的完整外部联接

SELECT * FROM Table FULL OUTER Join Table WHERE Table.date = 'Mon' Or Table.n1 = 1; 

到目前为止你尝试了什么?嗨,欧文,这不起作用。我需要有像上面输出的所有记录。但是您的查询只得到
n1
=1。然后,它缺少记录id 1,该记录id具有
n1
=2。问题是,如果我有一个包含大量行的表,那么由于嵌套查询,查询运行非常慢。我应该如何改进呢?您是否通过
emp
为表编制索引?你可以试试。是的,我试过了。但还是很慢。无论如何,我可以分解为两个查询并合并它们。我觉得速度更快:-|