如何考虑两列?

时间:2011-08-11 14:14:15

标签: mysql sql concatenation sql-like

我有一个包含两列first_namelast_name的客户表。

如何在查询中使用LIKE,以便能够以相同的温度从两列获取数据?

例如:

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE full_name LIKE 'John D%'

我试过这个,它告诉我full_name列不存在。

5 个答案:

答案 0 :(得分:33)

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'

答案 1 :(得分:6)

你快到了

SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'

注意:这可能没有很好的表现。您可能需要考虑full text search

答案 2 :(得分:4)

使用HAVING代替WHERE

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
   FROM customer HAVING full_name LIKE 'John D%'

答案 3 :(得分:0)

我手头没有MySql,但你不能做类似下面代码的事情吗?

SELECT CONCAT(first_name, ' ', last_name) as 'full_name' 
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'

免责声明:这可能非常慢!!!

答案 4 :(得分:0)

SELECT * 
FROM customer 
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%' 

可能会非常慢,但如果您的数据库非常小,则无关紧要。使用CONCAT时,请确保列名称的排序规则相同,否则会收到错误消息。

以下是我希望我的LIKE语句适用于类别名称和课程名称的声明。我检查两个表中的cat_id,以便我可以知道哪个课程属于哪个类别。

SELECT * FROM courses a INNER JOIN categories b ON a.cat_id=b.cat_id 
WHERE CONCAT(b.cat_name,' ',a.course_name)
LIKE :name ORDER BY b.cat_id

:name是占位符(PDO)