2009-11-11 64 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

相關問題