MySQL选择CONCAT条件

Ale*_*x K 111 mysql select concat where conditional-statements

我想在脑海里编译这个...我有一个带有firstname和lastname字段的表,我有一个像"Bob Jones"或"Bob Michael Jones"这样的字符串和其他几个字符串.

问题是,我在名字中有Bob,在姓氏中有Michael Jones

所以我想

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
 WHERE firstlast = "Bob Michael Jones"
Run Code Online (Sandbox Code Playgroud)

但它说未知的专栏"firstlast"..任何人都可以帮忙吗?

mdm*_*dma 174

您提供的别名用于查询的输出 - 它们在查询本身中不可用.

您可以重复表达式:

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
FROM users
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
Run Code Online (Sandbox Code Playgroud)

或者包装查询

SELECT * FROM (
  SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users) base 
WHERE firstLast = "Bob Michael Jones"
Run Code Online (Sandbox Code Playgroud)

  • 这是作为答案. (5认同)

Cha*_*ndu 34

试试这个:

SELECT * 
  FROM  (
        SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
        FROM users 
    ) a
WHERE firstlast = "Bob Michael Jones"
Run Code Online (Sandbox Code Playgroud)


Jef*_*sen 10

SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast 
FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
Run Code Online (Sandbox Code Playgroud)


Vir*_*mal 8

使用CONCAT_WS().

SELECT CONCAT_WS(' ',firstname,lastname) as firstlast FROM users 
WHERE firstlast = "Bob Michael Jones";
Run Code Online (Sandbox Code Playgroud)

第一个参数是其余参数的分隔符.


RC.*_*RC. 7

尝试:

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
  FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones"
Run Code Online (Sandbox Code Playgroud)

除非您将查询作为子选择执行,否则您的别名firstlast在查询的where子句中不可用.


Bog*_*dan 7

可以使用重复CONCAT表达式或使用子查询的替代方法.您可以使用HAVING识别列别名的子句.

SELECT 
  neededfield, CONCAT(firstname, ' ', lastname) AS firstlast 
FROM
  users 
HAVING firstlast = "Bob Michael Jones"
Run Code Online (Sandbox Code Playgroud)

这是一个有效的SQL小提琴.