Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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 - Fatal编程技术网

Mysql 在查询中使用联接时获取错误

Mysql 在查询中使用联接时获取错误,mysql,sql,Mysql,Sql,我有一个疑问: SELECT * FROM `employee_activities` a LEFT JOIN `activity` b ON a.activity_code = b.code LEFT JOIN `employees` c ON a.employee_code = c.code WHERE b.type = "Design" AND c.code NOT IN( SELECT * FROM `employee_activities` a LEFT JOI

我有一个疑问:

SELECT * FROM `employee_activities` a
LEFT JOIN `activity` b ON a.activity_code = b.code
LEFT JOIN `employees` c ON a.employee_code = c.code
WHERE b.type = "Design"
AND c.code NOT IN(
    SELECT * FROM `employee_activities` a
        LEFT JOIN `activity` b ON a.activity_code = b.code
        LEFT JOIN `employees` c ON a.employee_code = c.code
        WHERE b.type = "Testing"
)
GROUP BY c.code
我得到这个错误:

#1241 - Operand should contain 1 column(s)
我想让所有员工至少有一个“设计”类型的活动,而没有“测试”类型的活动

我有一个可以工作的查询,但我希望它能够与连接一起工作

这项工作:

SELECT c.name FROM `employee_activities` a, `activity` b, `employees` c
WHERE a.activity_code = b.code
AND a.employee_code = c.code
AND b.type = "Design"

AND c.code NOT IN(
    SELECT c.code FROM `employee_activities` a, `activity` b, `employees` c
        WHERE a.activity_code = b.code
        AND a.employee_code = c.code
        AND b.type = "Testing"
)
GROUP BY c.code

我在sql with JOIN上做错了什么?

对于not in子查询-它应该只包含一列-例如

SELECT * FROM `employee_activities` a
LEFT JOIN `activity` b ON a.activity_code = b.code
LEFT JOIN `employees` c ON a.employee_code = c.code
WHERE b.type = "Design"
AND c.code NOT IN(
    SELECT b.employee_code FROM `employee_activities` a
        LEFT JOIN `activity` b ON a.activity_code = b.code
        LEFT JOIN `employees` c ON a.employee_code = c.code
        WHERE b.type = "Testing"
)
GROUP BY c.code

您的问题在这一部分:

AND c.code NOT IN(
SELECT * FROM

您不能在此处使用*来查看c.code是否在返回的字段值列表中,并且必须在select中仅指定一个字段。

此部分中存在问题:

AND c.code NOT IN( 
    SELECT * FROM `employee_activities` a
您不能在该嵌套查询中选择*。您需要只选择一列与
c.code
进行比较。您需要这样做:

AND c.code NOT IN( 
    SELECT c.code FROM `employee_activities` a
你的问题

AND c.code NOT IN(
   SELECT * FROM `employee_activities` a
...
尝试将c.code与子查询中的所有列进行比较。你想要的可能是

AND c.code NOT IN(
    SELECT c.code FROM `employee_activities` a
另外,您的
左连接也有问题

LEFT JOIN `activity` b ON a.activity_code = b.code
...
WHERE b.type = "Design"
当您比较一个左连接到
WHERE
子句中的列时,它基本上将整个连接变成
内部连接。由于您的原始查询似乎使用了内部联接,这应该可以,但您也可以将其更改为

SELECT * FROM `employee_activities` a
JOIN `activity` b ON a.activity_code = b.code AND b.type='Design'
LEFT JOIN `employees` c ON a.employee_code = c.code
这样做:

SELECT * FROM `employee_activities` a
LEFT JOIN `activity` b ON a.activity_code = b.code
LEFT JOIN `employees` c ON a.employee_code = c.code
WHERE b.type = "Design"
AND c.code NOT IN(
    SELECT c.code FROM `employee_activities` a
        LEFT JOIN `activity` b ON a.activity_code = b.code
        LEFT JOIN `employees` c ON a.employee_code = c.code
        WHERE b.type = "Testing"
)
GROUP BY c.code

在这里,您应该将数据与代码列进行比较,*将获取所有记录。

oops。是的,我的错。我没看到。谢谢。你不能在子查询中这样做
选择*
c.code不在
部分正在查找要返回的单个克隆。谢谢。谢谢大家。:)这听起来好像已经解决了,但是如果你还在考虑用SqLoFdle来更新你的问题。