该语句产生以下错误。
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我认为我需要在子查询中连接字段名称?
SELECT (
SELECT COALESCE(Table_Field, Field) AS Fields
FROM API_Objects_Fields
WHERE Field IN (
'fullname'
,'confirmed'
,'primary_email'
,'location_short'
)
)
FROM user_basics U
INNER JOIN Pod_Membership PM ON U.UserID = PM.UserID
WHERE PM.PodID = 164
ORDER BY U.Ctime DESC
子查询指定要从表中返回的字段。
答案 0 :(得分:0)
WITH CTE AS
(SELECT (
SELECT DISTINCT TOP 1 COALESCE(Table_Field, Field)
FROM API_Objects_Fields F
WHERE F.UserID = PM.UserID AND F.Field IN (
'fullname'
,'confirmed'
,'primary_email'
,'location_short'
)
)AS Fields,
ROW_NUMBER()OVER (PARTITION BY Table_Field ORDER BY FIELD)AS RN
FROM user_basics U
INNER JOIN Pod_Membership PM ON U.UserID = PM.UserID
WHERE PM.PodID = 164
ORDER BY U.Ctime DESC
)
Select * from CTE WHERE RN = 1
这是一个基于您的问题的假设查询
答案 1 :(得分:0)
DECLARE @Name VARCHAR(1000)
Select @Name =
COALESCE(@Name,'') +Table_Field + ';'
FROM API_Objects_Fields
WHERE Field IN
( 'fullname' ,'confirmed' ,'primary_email' ,'location_short' )
Select @Name As FieldName
对于上述评论,@akfkmupiwu需要这样做
答案 2 :(得分:0)
错误告诉您
您的查询问题正是错误所说的,它带来了多个结果。由于子查询位于外部查询的选择部分(而不是from或where),因此sql正在查找填充特定列的一个值。在填写excel电子表格方面更多地考虑它。您不能向一个单元格添加两个单独的值。相反,您需要将数据分成两行。
另一方面,合并检查第一个值是否为null,如果是,则返回第二个值。如果第一个值不为null,则返回该值。听起来,这不是你正在寻找的行为。
如何解决此问题
您需要更改查询以针对Fields
可能的每个可能值拉回不同的行,或者您需要找到一种方法来仅为Fields
指定一个值。由于我不确定你在寻找什么,我将展示解决这个问题的第一种方法。
数据强>
您的问题没有提供API_Objects_Fields
的任何数据,所以我要做一些。我们假设此表中的列为Field_ID
,Table_Field
和Field
,让我们假设您的表格如下:
Field_ID | Table_Field | Field 1 | Alan Turing | fullname 2 | Catherine Zeta Jones | fullname 3 | True | confirmed 4 | MN | location_short 5 | 123-456-7890 | phone_number
正如我之前提到的,现在您的查询将尝试撤回字段为fullname,confirm或location_short all的行。而不是试图填充一行的一列。完整的4个结果,让我们改变你的查询以带回4行
查询
SELECT f.Table_Field, Field
FROM user_basics U
INNER JOIN Pod_Membership PM ON U.UserID = PM.UserID
INNER JOIN (
SELECT Table_Field, Field
FROM API_Objects_Fields
WHERE Field IN (
'fullname'
,'confirmed'
,'primary_email'
,'location_short'
)
) f
WHERE PM.PodID = 164
ORDER BY U.Ctime DESC
将会发生什么
此查询现在将撤回看起来更像这样的数据:
Table_Field | Fields Alan Turing | fullname Catherine Zeta Jones | fullname True | confirmed MN | location_short
但是,我认为您最终会对结果感到惊讶。由于查询未将API_Objects_Fields中的数据与任何其他表连接,因此您将反复从上面的结果表中获取值。实际上,您将获得
返回的每一行的上述值Select *
From user_basics u
INNER JOIN Pod_Membership PM ON U.UserID = PM.UserID
WHERE PM.PodID = 164
如果此查询返回12个结果,则最终会得到12个Alan Turings,12个Catherine Zeta Jones,12个Trues和12个MN。如果这不是您要查找的结果,则需要在内部联接中添加ON
部分,以便f
的结果与其他表格相关联。