Sql 当使用;及;在where子句中,get error“;参数的类型必须为boolean";
错误:和的参数必须是布尔类型,而不是可变字符类型Sql 当使用;及;在where子句中,get error“;参数的类型必须为boolean";,sql,postgresql,Sql,Postgresql,错误:和的参数必须是布尔类型,而不是可变字符类型 SELECT partno, count(manufacturer) FROM components WHERE partno IN (SELECT partno FROM productions WHERE year = 2005 AND attr is NULL )
SELECT
partno,
count(manufacturer)
FROM
components
WHERE
partno IN (SELECT partno FROM productions
WHERE
year = 2005
AND attr is NULL
)
GROUP BY partno
UNION
SELECT
partno,
count(manufacturer)
FROM components
WHERE
partno IN (SELECT partno FROM productions
WHERE
year = 2005
AND attr is NULL
)
GROUP BY partno
)
AND (
partno NOT IN (SELECT partno FROM components
)
);
union后的部分将包括非生产组件中的所有零件号(它们应计为0)您有一个括号太多(在
attr为NULL后)
并且您有一个聚合函数(第二部分中的count
),没有分组依据。你是说:
select partno, count(manufacturer)
from components
where partno in
(
select partno from productions where year=2005 and attr is NULL
)
group by partno
UNION
select partno, count(manufacturer)
from components
where partno in
(
select partno from productions where year=2005 and attr is NULL
)
AND partno not in (select partno from components)
group by partno;
您在联合体的第二部分有一个结束括号)
错误(或者您在year=2005
之前缺少一个开始括号)。联合体的第二部分要检索什么?如果我们删除可疑的括号,我们似乎最终会要求组件
中不存在的行。这似乎有点问题,怎么会有问题?联合体的第一部分不计算它们。我将再次重复“来自组件的行,这些行在组件中不存在”-这怎么会是一个非空集?现在它是说components.partno必须出现在group by子句中。此答案更正了您原来的查询,但是第二个SELECT
语句没有向结果行集添加任何信息:第二个SELECT返回的所有行都存在于第一个SELECT中,但随后它们被丢弃,因为UNION
操作符删除了重复的行。只是想澄清一下:这不是这个答案的问题,这是原始查询的问题。@Celeritas:正如Gerardo指出的,我们需要你的输入来知道你想要得到什么!希望我的答案能纠正语法错误,但不是逻辑错误!