2009-11-11 236 views
4

我有这个查询,我得到错误“操作数应该包含1列”,我的查询有什么错?SQL错误:操作数应该包含1列(s)

SELECT * FROM contact AS b WHERE b.id IN 
(
    SELECT * 
    FROM contact AS e 
    WHERE e.firstname LIKE ? 
    OR e.lastname LIKE ? 
    OR e.email LIKE ? 
    OR e.phone LIKE ? 
    OR e.company LIKE ? 
    OR e.profession LIKE ? 
    OR e.mobile LIKE ? 
) 
+0

这里http://www.sql-tutorial.net/SQL-IN.asp这里http://www.w3schools.com/SQl/sql_in看看。 asp为IN运算符提供一些参考 – Adrian 2009-11-11 11:12:22

回答

10

IN运算符期望一个匹配您所比较的值的列表:您的案例中的columnb.id。因此,更换此

WHERE b.id IN (SELECT * 

与此

WHERE b.id IN (SELECT id 
2
SELECT * FROM 

在上述声明中的问题,因为你是选择多列,

将其更改为

SELECT * FROM contact AS b WHERE b.id IN (SELECT e.ID FROM contact AS e WHERE e.firstname 
LIKE ? OR e.lastname LIKE ? OR e.email LIKE ? OR e.phone LIKE ? OR e.company LIKE ? OR 
e.profession LIKE ? OR e.mobile LIKE ?) 
3

WHERE子句使用IN确定哪些值b.id与您的查询有关。为了在你的第二个查询中使用IN,必须只返回一列。

7

第二个选择应该是SELECT *SELECT id insetad。

1
SELECT * FROM contact AS b WHERE b.id IN (SELECT e.Id FROM contact AS e WHERE e.firstname 
LIKE ? OR e.lastname LIKE ? OR e.email LIKE ? OR e.phone LIKE ? OR e.company LIKE ? OR 
e.profession LIKE ? OR e.mobile LIKE ?) 

代替SELECT * FROM contact,它应该是其中包含的值匹配到b.id一列。

所以,它应该是SELECT e.Id FROM contact

相关问题