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来更新你的问题。