从3个表

时间:2016-03-19 07:44:38

标签: mysql sql database oracle db2

我有3张桌子x,y,z

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

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

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

我对y.username的输入是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'));

3 个答案:

答案 0 :(得分:0)

尝试以下查询,它会正常工作。对于Oracle中的查询,您将获得 ORA-01427:单行子查询返回多行,因为在最内部子查询中,您试图传递常量和动态值(我的意思是什么)要说是你可以传递单个/多个常量值,或者你可以使用子查询)

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');

答案 1 :(得分:0)

由于您要从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')

答案 2 :(得分:-1)

您正在"中使用关键字"然后是(在括号中并用逗号分隔):

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

你做不到。您可以在括号中放置两个值或仅放置查询。

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

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'
)