SQL SELECT DISTINCT Subquery Error: 1241
SQL SELECT DISTINCT Subquery Error: 1241
我正在处理一个包含 SELECT DISTINCT 和子查询的长查询。它部分起作用,但放在一起时不起作用。我收到错误:1241 - 操作数应包含 1 列,我不明白为什么。任何帮助将不胜感激。
这是我的代码:
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);
没有 NOT IN 子查询,我得到这个结果:
NOT IN 子查询的原因是删除没有关联工作人员的第三个重复条目。结果应该只有图片结果字段中的前两个条目。
剪断:
... WHERE p.projId = '9' AND pc.company NOT IN (
SELECT p.projId, pc.company, s.staffId, s.fName, s.lName
FROM projects AS p ....
)
您在 company not in
时尝试 select,但在您的 not in
查询中指定了多个 select 行。刚刚 select company
:
... WHERE p.projId = '9' AND pc.company NOT IN (
SELECT pc.company
FROM projects AS p ....
)
您的 IN 列表应包含来自一列的值,pc.company。但是您的 IN 列表包含来自多个列的值。
如果要保留给定项目的所有行,请使用 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';
这似乎比复杂的 union
查询更明智。如果确实需要,您可以使用 coalesce()
将 NULL
值转换为 'NA'
。
我有点困惑 table 应该放在第一位 -- 但我认为这是所有公司而不是所有项目。如果是这样,这是没有 WHERE
:
的 FROM
子句
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;
我正在处理一个包含 SELECT DISTINCT 和子查询的长查询。它部分起作用,但放在一起时不起作用。我收到错误:1241 - 操作数应包含 1 列,我不明白为什么。任何帮助将不胜感激。
这是我的代码:
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);
没有 NOT IN 子查询,我得到这个结果:
NOT IN 子查询的原因是删除没有关联工作人员的第三个重复条目。结果应该只有图片结果字段中的前两个条目。
剪断:
... WHERE p.projId = '9' AND pc.company NOT IN (
SELECT p.projId, pc.company, s.staffId, s.fName, s.lName
FROM projects AS p ....
)
您在 company not in
时尝试 select,但在您的 not in
查询中指定了多个 select 行。刚刚 select company
:
... WHERE p.projId = '9' AND pc.company NOT IN (
SELECT pc.company
FROM projects AS p ....
)
您的 IN 列表应包含来自一列的值,pc.company。但是您的 IN 列表包含来自多个列的值。
如果要保留给定项目的所有行,请使用 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';
这似乎比复杂的 union
查询更明智。如果确实需要,您可以使用 coalesce()
将 NULL
值转换为 'NA'
。
我有点困惑 table 应该放在第一位 -- 但我认为这是所有公司而不是所有项目。如果是这样,这是没有 WHERE
:
FROM
子句
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;