2014-11-05 96 views
0

我试图执行这个查询:嵌套在SQL错误操作数选择应包含1列

select *, (select * from tab1 where tab1.type!="firstype") as P 
from tab2 where tab2.attr="something" and tab2.tab1_id=P.id 

但我有此错误:

Error Code: 1241. Operand should contain 1 column(s) 0,001 sec 

我理解的错误,但不知其所以然出来。 P.id不工作?

+0

不能使用子查询产生的多个列的方式。尝试只选择ID字段。 – 11684 2014-11-05 14:58:28

+0

(即“从tab1 ...中选择ID”)。 – 11684 2014-11-05 14:59:07

回答

1

查询更改为: -

SELECT * 
FROM Tab1 P, Tab2 
WHERE tab2.tab1_id=P.id 
AND tab2.attr = "something" 
AND tab1.type != "firstype" 
+0

确定,但P.id不工作,所以如果我尝试:从tab1,tab2其中tab2.tab1_id = tab1.id ...作品 – 2014-11-05 15:07:58

+0

是的,它肯定会工作。 – 2014-11-05 19:45:22

0

你在错误的地方有from子句。而且,您应该使用明确的join语法。除此之外,它将有助于防止此类错误:

select * 
from tab2 join 
    tabl p 
    on tab2.tab1_id = P.id and 
     tab2.attr = 'something' and 
     p.type <> 'firstype'; 

您也不需要子查询。筛选条件可以在外部查询的onwhere子句中进行。

相关问题