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?
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"
Essaye ça:
SELECT *
FROM (
SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast
FROM users
) a
WHERE firstlast = "Bob Michael Jones"
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast
FROM users
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
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.
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 .
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.