我有一個客戶表,有兩列first_name
和last_name
。如何做一個LIKE考慮兩列?
如何在查詢中使用LIKE從同時馴服的兩列中獲取數據?
例如:
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer WHERE full_name LIKE 'John D%'
我試過這個,它告訴我full_name
列不存在。
我有一個客戶表,有兩列first_name
和last_name
。如何做一個LIKE考慮兩列?
如何在查詢中使用LIKE從同時馴服的兩列中獲取數據?
例如:
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer WHERE full_name LIKE 'John D%'
我試過這個,它告訴我full_name
列不存在。
你幾乎沒有
SELECT *
FROM customer
WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
注:這可能不會有很好的表現。你可能要考慮full text search。
我手邊沒有MySql,但不能做類似下面的代碼?
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer WHERE CONCAT(first_name, ' ', last_name) LIKE 'John D%'
聲明:這可能會非常慢!
使用HAVING
代替WHERE
:
SELECT CONCAT(first_name, ' ', last_name) as 'full_name'
FROM customer HAVING full_name LIKE 'John D%'
爲什麼HAVING而不是WHERE? –
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
:名稱是佔位符(PDO)
[全文搜索](http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html)是最SQL中有效的手段來做你想做的事情。 –
@OMG由於我可以更改表和數據插入,我創建了一個新的索引列full_name並使用它,而不是由於回答中提到的性能問題。 – RedDragon