【问题标题】:Subquery Issue while fetching the columns from 3 tables从 3 个表中获取列时出现子查询问题
【发布时间】:2016-03-19 07:44:37
【问题描述】:

我有 3 张桌子 x,y,z

x 有用户名,全名
y 有用户名、通讯、时间
z 有 fusername,musername

我要选择x.fullnamex.usernamey.commy.time

内部连接字段为x.usernamey.usernamez.fusername

我对@9​​87654329@ 的输入在哪里(z.fusername = 'W' 及其在z.fusername 中的所有相关条目)。

现在,

我尝试创建一个子查询来提取它的全名,但得到一个错误代码

错误代码:1242。子查询返回多于 1 行

select fullname from x where username in 
(select username from Y where username in
((select musername from tbl_followers where fusername='W'),'W'));

【问题讨论】:

  • 您能否分享一些示例数据以及您试图为这些数据获得的结果?
  • 了解连接
  • 约束子查询返回的行数。
  • 感谢您的宝贵时间,我解决了。 :) 问题出在我的子查询上。

标签: mysql sql database oracle db2


【解决方案1】:

试试下面的查询,它会正常工作。对于您在 Oracle 中的查询,您将得到 ORA-01427: single-row subquery returns more than one row 因为在最内部的子查询中,您试图同时传递常量和动态值(我的意思是也就是说,您可以传递单个/多个常量值,也可以使用子查询)

SELECT fullname
FROM x
WHERE username IN
  (SELECT username
  FROM Y
  WHERE username IN (
    (SELECT MUSERNAME FROM TBL_FOLLOWERS WHERE FUSERNAME='W') 
  )
  or username='W');

【讨论】:

    【解决方案2】:

    由于您想从 X 以及 Y 中选择列,您可以使用以下查询 -

    select x.fullname, x.username, y.comm, y.time
      from x, y
     where x.username = y.username
       and (y.username in
           (SELECT MUSERNAME FROM TBL_FOLLOWERS WHERE FUSERNAME = 'W') or
           y.username = 'W')
    

    【讨论】:

      【解决方案3】:

      您使用的是关键字“in”,后跟(在括号中并用逗号分隔):

      • 可能返回多个结果的查询。
      • 一个值。

      你不能那样做。您可以将两个值或仅将查询放在括号中。

      所以解决方案是像这样转换您的查询:

      select fullname from x
       where username 
      in 
      (
        select username from Y
        where username in 
        (
           select musername from tbl_followers where fusername='W'
         ) 
         or username = 'W'
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        • 2012-12-31
        • 1970-01-01
        • 2015-12-17
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多