【问题标题】:Searching concatenated field搜索连接字段
【发布时间】:2011-08-19 12:21:33
【问题描述】:
SELECT `users`.`firstname`, `users`.`lastname`, `users`.`id`, 
CONCAT(firstname," " ,lastname) AS `users.firstnamelastname`, 
CONCAT(lastname," " ,firstname) AS `users.lastnamefirstname` 
FROM `users` 
WHERE (id != '15') 
AND (firstnamelastname like 'a%' ) 
OR (lastnamefirstname like 'a%')

上面的代码我用来搜索连接字段,但上面的代码不起作用。有没有哪位sql大师帮帮我。

【问题讨论】:

  • 怎么不工作了?您是否收到错误消息或只是不正确的结果?
  • 您使用的是 MySQL 还是 T-SQL?您的问题被标记为两者。
  • 他试图在查询中使用别名而不使用 HAVING。但是,创建诸如 users.firstnamelastname 之类的别名实在是太糟糕了,在不指定源 (users.) 的情况下为其命名并阅读 HAVING 关键字。

标签: php mysql


【解决方案1】:
SELECT *
FROM 
    (
    SELECT `users`.`firstname`, `users`.`lastname`, `users`.`id`, 
    CONCAT(firstname," " ,lastname) AS `firstnamelastname`, 
    CONCAT(lastname," " ,firstname) AS `lastnamefirstname` 
    FROM `users` 
    WHERE (id != '15')
)
WHERE (firstnamelastname like 'a%' ) 
OR (lastnamefirstname like 'a%')

当 MySQL 首次评估 WHERE 子句时,您的别名对它不可用。

但您的查询实际上等于:

SELECT `users`.`firstname`, `users`.`lastname`, `users`.`id`, 
CONCAT(firstname," " ,lastname) AS `firstnamelastname`, 
CONCAT(lastname," " ,firstname) AS `lastnamefirstname` 
FROM `users` 
WHERE (id != '15')
AND (firstname LIKE 'a%' OR lastname LIKE 'a%')

所以你在 where 子句中的 concat 是不必要的。

【讨论】:

    【解决方案2】:

    好像你的 where try 有多余的大括号

    WHERE (id != '15') 
    AND (firstnamelastname like 'a%' OR lastnamefirstname like 'a%')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多