【问题标题】:Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
【发布时间】:2012-12-04 12:19:19
【问题描述】:

我有以下疑问:

SELECT QuoteReference,
       CreatedDate,
       StartDate,
       EndDate,
       Operation,
       TableName,
       OccurredAt,
       PerformedBy,
       FieldName,
       OldValue,
       NewValue,
       Quotes.CreatedByID,
       CompletedDate,
       EmailAddress = (SELECT ContactDetails.EmailAddress,
                              QuoteReference,
                              ContactDetails.MobilePhoneNumber
                       FROM   ContactDetails,
                              Quotes,
                              QuoteCustomers
                       WHERE  ContactDetails.ID = Quotes.ID
                              AND QuoteCustomers.QuoteID = ContactDetails.ID)
FROM   Quotes
       JOIN Audit
         ON Quotes.ID = Audit.RowId
WHERE  Quotes.CreatedDate BETWEEN '20100401' AND '20120830'
       AND PaymentReference IS NOT NULL
       AND Audit.OccurredAt > Quotes.CompletedDate
       AND Quotes.EmailAddress < > NULL
       AND TableName = 'Quotes'
       AND Quotes.PolicyReference = NULL
       AND Quotes.CreatedByID < > 2 
ORDER BY  Audit.OccurredAt desc

执行时出现此错误:

当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

在子查询中添加第二个 where 子句后。我该怎么做才能解决这个问题?

【问题讨论】:

  • 为什么在子查询中选择QuoteReference,ContactDetails.MobilePhoneNumber?您只需要将 EmailAddress 分配给单个列即可。

标签: tsql


【解决方案1】:

您的子查询必须返回 ONE 行和 ONE 列,因此它应该如下所示:

   EmailAddress = (SELECT TOP 1 ContactDetails.EmailAddress
                   FROM   ContactDetails,
                          Quotes,
                          QuoteCustomers
                   WHERE  ContactDetails.ID = Quotes.ID
                          AND QuoteCustomers.QuoteID = ContactDetails.ID)

【讨论】:

    【解决方案2】:

    您正在将三列值选择到一个变量中。

    改变

    EmailAddress = (SELECT EmailAddress,
                              QuoteReference,
                              ContactDetails.MobilePhoneNumber
                       FROM   ContactDetails,
                              Quotes,
                              QuoteCustomers
                       WHERE  ContactDetails.ID = Quotes.ID
                              AND QuoteCustomers.QuoteID = ContactDetails.ID)
    

    EmailAddress = (SELECT EmailAddress
                       FROM   ContactDetails,
                              Quotes,
                              QuoteCustomers
                       WHERE  ContactDetails.ID = Quotes.ID
                              AND QuoteCustomers.QuoteID = ContactDetails.ID)
    

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 1970-01-01
      • 2011-09-24
      • 2018-04-14
      相关资源
      最近更新 更多