Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用子查询将我的两个查询转换为一个查询,同时对第二个查询求反?_Mysql_Sql_Join_Subquery_Notin - Fatal编程技术网

Mysql 如何使用子查询将我的两个查询转换为一个查询,同时对第二个查询求反?

Mysql 如何使用子查询将我的两个查询转换为一个查询,同时对第二个查询求反?,mysql,sql,join,subquery,notin,Mysql,Sql,Join,Subquery,Notin,我的两个SQL查询如下所示:- (一) 两个查询都运行正常,而我需要的是将其变成一个查询,如(1+!2)我需要将第二个查询的对立面与第一个查询相关联。 我试图得到第二次查询的相反结果,如下所示:- SELECT Pk_class_id FROM tbl_student JOIN tbl_class on tbl_student.fk_class_id = tbl_class.pk_class_id JOIN tbl_staff on tbl_staff.Pk_staff_id = tb

我的两个SQL查询如下所示:-

(一)


两个查询都运行正常,而我需要的是将其变成一个查询,如(1+!2)我需要将第二个查询的对立面与第一个查询相关联。


我试图得到第二次查询的相反结果,如下所示:-

SELECT Pk_class_id 
FROM tbl_student 
JOIN tbl_class on tbl_student.fk_class_id = tbl_class.pk_class_id 
JOIN tbl_staff on tbl_staff.Pk_staff_id = tbl_class.fk_staff_id 
WHERE tbl_staff.reg_time 
**NOT IN**
(
SELECT Pk_class_id 
FROM tbl_student 
JOIN tbl_class on tbl_student.fk_class_id = tbl_class.pk_class_id 
JOIN tbl_staff on tbl_staff.Pk_staff_id = tbl_class.fk_staff_id 
WHERE  tbl_staff.reg_time >= tbl_student.updated_at -INTERVAL 1 MINUTE
)
结果:错误1241(21000):操作数应包含1列 有什么建议可以得到第二次查询的相反结果并与第一次查询相结合


任何代码都将受到感谢。

您正在子查询中使用pk\u id检查tcl\u staff.reg\u time。或者,您也可以使用left-join将其简单而有用地用于此类型

SELECT x.* 
  FROM my_table_instance x
  LEFT 
  JOIN my_other_table_instance y
    ON y.something = x.something
 WHERE y.something IS NULL
SELECT Pk_class_id 
FROM tbl_student 
JOIN tbl_class on tbl_student.fk_class_id = tbl_class.pk_class_id 
JOIN tbl_staff on tbl_staff.Pk_staff_id = tbl_class.fk_staff_id 
WHERE tbl_staff.Pk_class_id
**NOT IN**
(
SELECT Pk_class_id 
FROM tbl_student 
JOIN tbl_class on tbl_student.fk_class_id = tbl_class.pk_class_id 
JOIN tbl_staff on tbl_staff.Pk_staff_id = tbl_class.fk_staff_id 
WHERE  tbl_staff.reg_time >= tbl_student.updated_at -INTERVAL 1 MINUTE
)    
选择姓名、手机、电子邮件
来自清华大学的学生
左边
加入tbl_班
关于tbl_student.fk_class_id=tbl_class.pk_class_id
左边
加入tbl_工作人员
在tbl_staff.Pk_staff_id=tbl_class.fk_staff_id上
其中tbl_student.upd_time=tbl_student.upd_time-间隔1分钟);

oracle的减号运算符。任何类似的东西都会有帮助,对吗?我必须检查它不是空条件。第二个查询返回一些输出,我需要避免实际的结果,我需要连接两个表。我可以使用相同的左连接吗?由于我的结果不为空,所以使用什么来代替是空的?上述方法不起作用。它给出了错误的答案,因为条件不是空的谢谢你的努力,我发现自己:)
SELECT x.* 
  FROM my_table_instance x
  LEFT 
  JOIN my_other_table_instance y
    ON y.something = x.something
 WHERE y.something IS NULL
SELECT Pk_class_id 
FROM tbl_student 
JOIN tbl_class on tbl_student.fk_class_id = tbl_class.pk_class_id 
JOIN tbl_staff on tbl_staff.Pk_staff_id = tbl_class.fk_staff_id 
WHERE tbl_staff.Pk_class_id
**NOT IN**
(
SELECT Pk_class_id 
FROM tbl_student 
JOIN tbl_class on tbl_student.fk_class_id = tbl_class.pk_class_id 
JOIN tbl_staff on tbl_staff.Pk_staff_id = tbl_class.fk_staff_id 
WHERE  tbl_staff.reg_time >= tbl_student.updated_at -INTERVAL 1 MINUTE
)    
SELECT name, mobile, email 
  FROM tbl_student
  LEFT 
  JOIN tbl_class
    ON tbl_student.fk_class_id = tbl_class.pk_class_id
  LEFT 
  JOIN tbl_staff
ON tbl_staff.Pk_staff_id = tbl_class.fk_staff_id
 WHERE tbl_student.upd_time <= now() - INTERVAL 30 DAY AND fk_class_id NOT IN 
(SELECT fk_class_id 
  FROM tbl_student
  LEFT 
  JOIN tbl_class
    ON tbl_student.fk_class_id = tbl_class.pk_class_id
  LEFT 
  JOIN tbl_staff
ON tbl_staff.Pk_staff_id = tbl_class.fk_staff_id
 WHERE
 tbl_staff.registered_at >= tbl_student.upd_time - INTERVAL 1 MINUTE);