【问题标题】:Select inside select not working properly and shows error选择内部选择无法正常工作并显示错误
【发布时间】:2017-06-20 10:00:47
【问题描述】:

我有两张桌子:

t_orderPayment with n_id,n_order,n_paytype AND
t_paytype with n_ID , str_desc

我的查询是:

SELECT t_OrderPayment.n_order , 
t_OrderPayment.n_paytype = (select t_paytype.str_desc as n_paytype from t_PayType, t_orderpayment where t_OrderPayment.n_PayType = t_PayType.n_ID)
FROM t_OrderPayment
WHERE (((t_OrderPayment.n_PaymentStatus)<>-7)) ;

返回错误

"这个子查询最多可以返回一条记录"

我尝试使用 MAX 和 TOP 1 设置它,例如 n_paytype = (select max(t_paytype.str_desc) 但显示错误 Expr1001 Str.desc 只有文本值,这可能是原因。可能是 INNER JOIN 可以以某种方式帮助我吗?

【问题讨论】:

  • 您能否格式化代码并指定所需的结果?
  • 您使用的是哪个DBMS
  • 如果此查询select t_paytype.str_desc as n_paytype from t_PayType, t_orderpayment where t_OrderPayment.n_PayType = t_PayType.n_ID 返回多个标量值,则不能在分配子选择中使用它...
  • 我相信它是 Microsoft Access,我用 Visual Data Manager 打开它。但是我设法解决了。我终于明白了 INNER JOIN 如果将来有人需要,这是代码:SELECT t_OrderPayment.t_date,n_order,t_Paytype.str_desc as n_PayType FROM t_OrderPayment INNER JOIN t_paytype on t_OrderPayment.n_PayType = t_PayType.n_ID WHERE (((t_OrderPayment.n_PaymentStatus) -7)) ;

标签: sql


【解决方案1】:

您似乎不小心进行了交叉联接。您不需要在子查询中再次引用 t_OrderPayment 表 - 尝试删除它(但保留 where 子句,因为它会将其链接到外部查询)。看起来整个子查询可以被删除并变成一个连接......

SELECT t_OrderPayment.n_order,
       t_paytype.str_desc AS n_paytype
FROM   t_OrderPayment
       INNER JOIN t_PayType
               ON t_OrderPayment.n_PayType = t_PayType.n_ID
WHERE  t_OrderPayment.n_PaymentStatus <> -7;

【讨论】:

    【解决方案2】:

    选择 t_OrderPayment.n_order, t_paytype.str_desc AS n_paytype FROM t_OrderPayment,t_PayType WHERE t_OrderPayment.n_PayType = t_PayType.n_ID AND t_OrderPayment.n_PaymentStatus -7;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-31
      • 2017-04-07
      • 1970-01-01
      • 2013-10-06
      • 2016-01-24
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多