我們開發數據庫應用時,常常需要用到模糊查詢。如果同一個條件需要匹配很多字段怎么辦呢?通常,程序員會每個字段都在SQL中“field like'%cond%'”一次。這樣,SQL語句會長得驚人,碰上復雜一點的,甚至SQL語句會因為超長而被數據庫拒絕執行。其實,這個問題只要動動腦筋就很容易解決:首先,將要匹配相同條件的字段連起來(field1 field2 ...)成一個長字符串;然后再 Like “%cond%”就可以了。不過這種方法有個問題,就是得權衡多表連接造成的效率降低。一般來說,單表內字段肯定應該連接后再統一like判斷;表間字段,則需要先過濾后,再實行這個策略。采取這個策略,不僅可以縮短SQL,而且能夠有效地提高SQL的執行效率。
例:
| 以下為引用的內容: QUOTE: create table orders ( id int not null auto_increment, name varchar(100) not null, email varchar(255) not null, address text not null, pay_type char(10) not null, shipped_at datetime null, primary key (id) ); |
里面有數據
1 aaa aaa@gmail.com beijing cc 2006-10-11 16:17:26
現在想要查找出email為aaa開頭的,address為bei開頭的記錄
那么一般我們會構建如下SQL
select * from orders o where o.email like "aaa%" and o.address like "bei%"
其實我們可以使用如下SQL來縮短SQL語句(也就是連接字段一起進行like操作)
SELECT * FROM orders o where concat(o.email,o.address) like "like
新聞熱點
疑難解答