SELECT aliases.username AS phone_number,
subscriber.username AS user_name
FROM aliases, subscriber
WHERE aliases.contact REGEXP CONCAT('^sip:', subscriber.user_name, '[.*]')
請注意,下面的查詢效率會更高:
SELECT aliases.username AS phone_number,
subscriber.username AS user_name
FROM aliases, subscriber
WHERE aliases.contact LIKE CONCAT('sip:', subscriber.user_name, '%')
,而這一次,雖然看似複雜,更是有效的:
CREATE FUNCTION fn_get_next_subscriber(initial VARCHAR(200)) RETURNS VARCHAR(200)
NOT DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE _username VARCHAR(200);
DECLARE EXIT HANDLER FOR NOT FOUND RETURN UNHEX('FFFF');
SELECT username
INTO _username
FROM subscribers
WHERE username>= initial
AND username NOT LIKE CONCAT(initial, '%')
ORDER BY
username
LIMIT 1;
RETURN _username;
END
SELECT a.username AS phone_number,
s.username AS user_name
FROM (
SELECT si.*, CONCAT('sip:', username) AS fromcontact
FROM subscriber si
) s, aliases a
WHERE a.contact >= fromcontact
AND a.contact < fn_get_next_subscriber(fromcontact)
這將使用索引在aliases (contact)
並避免全表掃描。
看到這篇文章在我的博客:
如何
JOIN
有效地對LIKE
條件偉大的作品,謝謝! – Eddy 2009-04-27 15:52:53