[英]SQL SELECT DISTINCT Subquery Error: 1241
I am working on a long query that includes a SELECT DISTINCT and subquery. 我正在处理包含SELECT DISTINCT和子查询的长查询。 It is partially working, but not when put together.
它可以部分工作,但不能一起使用。 I am getting a Error: 1241 - Operand should contain 1 column(s) and I cannot see why.
我收到一个错误:1241-操作数应包含1列,而我看不到为什么。 Any help would be greatly appreciated.
任何帮助将不胜感激。
Here is my code: 这是我的代码:
SELECT p.projId, pc.company, s.staffId, s.fName, s.lName
FROM projects AS p
INNER JOIN projCorp AS pc ON p.projId = pc.projId
INNER JOIN projStaff AS ps ON p.projId = ps.projId
INNER JOIN staff AS s ON ps.staffId = s.StaffId
WHERE p.projId = '9' AND s.company = pc.company
UNION
SELECT DISTINCT p.projId, pc.company, "NA", "NA", "NA"
FROM projects AS p
INNER JOIN projCorp AS pc ON p.projId = pc.projId
INNER JOIN projStaff AS ps ON p.projId = ps.projId
WHERE p.projId = '9' AND pc.company NOT IN (SELECT p.projId, pc.company, s.staffId, s.fName, s.lName
FROM projects AS p
INNER JOIN projCorp AS pc ON p.projId = pc.projId
INNER JOIN projStaff AS ps ON p.projId = ps.projId
INNER JOIN staff AS s ON ps.staffId = s.StaffId
WHERE p.projId = '9' AND s.company = pc.company);
Without the NOT IN subquery, I am getting this result: 没有NOT IN子查询,我得到以下结果:
The reason for the NOT IN subquery is to get rid of the third duplicate entry that doesn't have a staff member associated. NOT IN子查询的原因是要消除没有工作人员相关联的第三个重复条目。 The result should just have the first two entries from the picture result field.
结果应仅包含图片结果字段中的前两个条目。
Snip: 剪断:
... WHERE p.projId = '9' AND pc.company NOT IN (
SELECT p.projId, pc.company, s.staffId, s.fName, s.lName
FROM projects AS p ....
)
You're trying to select when company not in
but there are specifying more than one selected row from within your not in
query. 您正在尝试选择
company not in
但是在您not in
查询中指定了多个选定行。 Just select company
: 只需选择
company
:
... WHERE p.projId = '9' AND pc.company NOT IN (
SELECT pc.company
FROM projects AS p ....
)
If you want to keep all the rows for a given projects, use a left join
: 如果要保留给定项目的所有行,请使用
left join
:
SELECT p.projId, pc.company, s.staffId, s.fName, s.lName
FROM projects p LEFT JOIN
projCorp pc
ON p.projId = pc.projId LEFT JOIN
projStaff ps
ON p.projId = ps.projId LEFT JOIN
staff s
ON ps.staffId = s.StaffId AND s.company = pc.company
WHERE p.projId = '9';
This seems more sensible than a complicated union
query. 这似乎比复杂的
union
查询更明智。 You can use coalesce()
to convert the NULL
values to 'NA'
, if that really is desirable. 如果确实需要,可以使用
coalesce()
将NULL
值转换为'NA'
。
I am a little confused on which table should go first -- but I'm thinking it is all companies as opposed to all projects. 我对应该首先使用哪个表感到有些困惑-但我认为这是所有公司而非所有项目的结果。 If so, this is the
FROM
clause with no WHERE
: 如果是这样,这是
FROM
子句,没有WHERE
:
FROM projCorp pc LEFT JOIN
projects p
ON p.projId = pc.projId AND p.projId = '9' LEFT JOIN
projStaff ps
ON p.projId = ps.projId LEFT JOIN
staff s
ON ps.staffId = s.StaffId AND s.company = pc.company;
Your IN list should contain values from one column, pc.company. 您的IN列表应包含pc.company一栏中的值。 But your IN list contains values from multiple columns.
但是您的IN列表包含来自多个列的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.