web-dev-qa-db-fra.com

MySQL select avec condition CONCAT

J'essaie de compiler cela dans mon esprit. J'ai une table avec les champs prénom et nom et une chaîne comme "Bob Jones" ou "Bob Michael Jones" et plusieurs autres.

la chose est, j'ai par exemple Bob en prénom, et Michael Jones en dernier nom

donc j'essaie de

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
 WHERE firstlast = "Bob Michael Jones"

mais cela dit colonne inconnue "firstlast" .. quelqu'un peut-il aider s'il vous plaît?

107
Alex K

Les alias que vous donnez sont pour la sortie de la requête - ils ne sont pas disponibles dans la requête elle-même.

Vous pouvez soit répéter l'expression:

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
FROM users
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"

ou envelopper la requête

SELECT * FROM (
  SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users) base 
WHERE firstLast = "Bob Michael Jones"
168
mdma

Essaye ça:

SELECT * 
  FROM  (
        SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
        FROM users 
    ) a
WHERE firstlast = "Bob Michael Jones"
34
Chandu
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast 
FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
10
Jeff Swensen

Utilisez CONCAT_WS ().

SELECT CONCAT_WS(' ',firstname,lastname) as firstlast FROM users 
WHERE firstlast = "Bob Michael Jones";

Le premier argument est le séparateur pour le reste des arguments.

8
Viraj Dhamal

Il existe une alternative à la répétition de l'expression CONCAT ou à l'utilisation de sous-requêtes. Vous pouvez utiliser la clause HAVING, qui reconnaît les alias de colonnes.

SELECT 
  neededfield, CONCAT(firstname, ' ', lastname) AS firstlast 
FROM
  users 
HAVING firstlast = "Bob Michael Jones"

Voici un travail SQL Fiddle .

7
Bogdan

Essayer:

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"

Votre alias firstlast n'est pas disponible dans la clause where de la requête, sauf si vous effectuez la requête en tant que sous-sélection.

7
RC.