SQL 子查询超过 1 个值
SQL Subquery more than 1 value
我的子查询有问题,希望有人能帮助我。
如果我运行以下:
select t4.code from OITM T0
INNER JOIN DLN1 T1 ON T1.[ItemCode] = T0.[ItemCode]
INNER JOIN ODLN T2 ON T2.[DocEntry] = T1.[DocEntry]
INNER JOIN ITM10 T3 ON T3.[ItemCode] = T0.[ItemCode]
LEFT JOIN ODCI T4 ON T4.[AbsEntry] = T3.[ISCommCode]
WHERE T2.DocEntry = '7060'
结果是:
尽管在某些情况下可能有多个行的值与所需值匹配,而其他行则不匹配。
我编写了一个查询,其中有一个子查询来检查这些结果,并在任何行中的 [code] 列不包含特定内容时显示一条消息:
IF(
(SELECT
T4.Code
FROM OITM T0
INNER JOIN DLN1 T1 ON T1.[ItemCode] = T0.[ItemCode]
INNER JOIN ODLN T2 ON T2.[DocEntry] = T1.[DocEntry]
INNER JOIN ITM10 T3 ON T3.[ItemCode] = T0.[ItemCode]
LEFT JOIN ODCI T4 ON T4.[AbsEntry] = T3.[ISCommCode]
WHERE T2.DocEntry = '7060') NOT IN ('22030010','22030001','22030009')
)
BEGIN
SELECT 'MESSAGE'
END
显然,如果它必须 return 超过 1 行,这将无法编译:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
HAVING 和 COUNT 不起作用,因为它们在编译时没有显示明显错误的消息。
这可能吗,还是我找错树了?
非常感谢。
检查是否有这样的行,你可以使用EXISTS
:
IF EXISTS (SELECT ...)
在你的情况下,我只会将 select distinct
到 return 设为特定值一次:
select DISTINCT t4.code from OITM T0 ...
更新
正如 @gordon-linoff 指出的那样,您可以像这样过滤掉不需要的值:
select distinct t4.code from OITM T0
...
where T2.DocEntry = '7060' and t4.code not in ('22030010','22030001','22030009')
-- using AND instead of ): ^^^
-- so one ( will be enough between EXISTS and SELECT
放在一起:
IF EXISTS(SELECT .... where T2.DocEntry = '7060' and t4.code not in ('22030010','22030001','22030009'))
BEGIN
...
END
我的子查询有问题,希望有人能帮助我。
如果我运行以下:
select t4.code from OITM T0
INNER JOIN DLN1 T1 ON T1.[ItemCode] = T0.[ItemCode]
INNER JOIN ODLN T2 ON T2.[DocEntry] = T1.[DocEntry]
INNER JOIN ITM10 T3 ON T3.[ItemCode] = T0.[ItemCode]
LEFT JOIN ODCI T4 ON T4.[AbsEntry] = T3.[ISCommCode]
WHERE T2.DocEntry = '7060'
结果是:
尽管在某些情况下可能有多个行的值与所需值匹配,而其他行则不匹配。
我编写了一个查询,其中有一个子查询来检查这些结果,并在任何行中的 [code] 列不包含特定内容时显示一条消息:
IF(
(SELECT
T4.Code
FROM OITM T0
INNER JOIN DLN1 T1 ON T1.[ItemCode] = T0.[ItemCode]
INNER JOIN ODLN T2 ON T2.[DocEntry] = T1.[DocEntry]
INNER JOIN ITM10 T3 ON T3.[ItemCode] = T0.[ItemCode]
LEFT JOIN ODCI T4 ON T4.[AbsEntry] = T3.[ISCommCode]
WHERE T2.DocEntry = '7060') NOT IN ('22030010','22030001','22030009')
)
BEGIN
SELECT 'MESSAGE'
END
显然,如果它必须 return 超过 1 行,这将无法编译:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
HAVING 和 COUNT 不起作用,因为它们在编译时没有显示明显错误的消息。
这可能吗,还是我找错树了?
非常感谢。
检查是否有这样的行,你可以使用EXISTS
:
IF EXISTS (SELECT ...)
在你的情况下,我只会将 select distinct
到 return 设为特定值一次:
select DISTINCT t4.code from OITM T0 ...
更新
正如 @gordon-linoff 指出的那样,您可以像这样过滤掉不需要的值:
select distinct t4.code from OITM T0
...
where T2.DocEntry = '7060' and t4.code not in ('22030010','22030001','22030009')
-- using AND instead of ): ^^^
-- so one ( will be enough between EXISTS and SELECT
放在一起:
IF EXISTS(SELECT .... where T2.DocEntry = '7060' and t4.code not in ('22030010','22030001','22030009'))
BEGIN
...
END