2009-11-11 8 views
4

J'ai cette requête et je reçois erreur "Opérande devrait contenir 1 colonne (s)", quoi de mal dans ma requête?ERREUR SQL: Opérande doit contenir 1 colonne (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

Jetez un coup d'oeil ici et ici http://www.sql-tutorial.net/SQL-IN.asp http://www.w3schools.com/SQl/sql_in. asp pour une référence sur l'opérateur IN – Adrian

Répondre

10

L'opérateur IN attend une liste de valeurs correspondant à ce que vous comparez: columnb.id dans votre cas. remplacer donc ce

WHERE b.id IN (SELECT * 

avec ce

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

le problème dans l'énoncé ci-dessus, parce que vous sélectionnez plus d'une colonne,

changement à

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

Votre WHERE clause utilise IN pour déterminer quelles valeurs de b.id sont pertinents pour votre requête. Afin d'utiliser dans votre deuxième requête, il faut retourner une seule colonne.

7

La deuxième sélection devrait être SELECT id insetad de SELECT *.

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

Au lieu de SELECT * FROM contact, il devrait y avoir une colonne qui contient les valeurs correspondant à b.id.

Ainsi, il devrait être SELECT e.Id FROM contact

Questions connexes