Besoin d'écrire une demande "Sélectionnez tous les enregistrements des clients d'une ville de" Paris "," Berlin "," Mannheim "ou" Londres "et leurs identifiants sont supérieurs à 10, mais inférieurs à 20"

Voici ma demande:

select * from Customers
where CustomerID>10 and CustomerID<20 in
(select * from Customers where City in
('Paris','Berlin','Mannheim','London');

Et je ne comprends pas pourquoi j'obtiens une erreur 1241 : l'opérande doit contenir 1 colonne?

1
Amayak 24 janv. 2017 à 14:43

5 réponses

Meilleure réponse

Voici la manière correcte d'écrire cette requête:

select *
from Customers
where CustomerID > 10 and
      CustomerID < 20 and
      City in ('Paris', 'Berlin', 'Mannheim', 'London');

Notez que la liste des villes correspondantes représente des données statiques et que vous n'avez donc pas besoin d'une sous-requête distincte pour l'utiliser dans la clause where in.

4
Tim Biegeleisen 24 janv. 2017 à 11:45

Vous pouvez utiliser BETWEEN pour vérifier une plage de valeurs. Et vous n'avez pas besoin d'ajouter une sous-requête pour vérifier les villes. Vous pouvez utiliser l'opérateur AND.

Requête

SELECT * FROM `Customers`
WHERE `CustomerID` BETWEEN 11 AND 19
AND `City`IN ('Paris','Berlin','Mannheim','London');
1
Ullas 24 janv. 2017 à 11:49

Vous n'avez pas mentionné le nom de la colonne pour la condition IN. Vous pouvez réécrire la requête comme

SELECT * FROM Customers WHERE City IN ('Paris','Berlin','Mannheim','London') AND CustomerID BETWEEN 10 AND 20
1
Ritz 24 janv. 2017 à 11:51

Vous n'êtes pas obligé d'utiliser deux SELECT * s. Utilisez ceci:

SELECT * FROM Customers
WHERE CustomerID > 10 AND
      CustomerID < 20 AND
      City IN ('Paris', 'Berlin', 'Mannheim', 'London');
0
ThisaruG 24 janv. 2017 à 11:50

Aussi comme ceci.Besoin de parenthèses pour l'instruction between

SELECT * FROM `Customers`
WHERE `CustomerID` (BETWEEN 11 AND 19)
AND `City` IN('Paris','Berlin','Mannheim','London');
0
Hikmat Sijapati 24 janv. 2017 à 11:48