Когда я хочу использовать таблицу phone_lookup для запроса display_name, я нахожу вводить как:
'Таблица, которая представляет результат поиска номера телефона, например, для идентификатора вызывающего абонента.Чтобы выполнить поиск, вы должны добавить номер, который вы хотите найти, к CONTENT_FILTER_URI.Этот запрос очень оптимизирован для разработчиков Android.
Но я не знаю, как Google оптимизировал этот запрос?
https://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup
Я сделал запрос. Наконец, это объясняется следующим образом:
SELECT data1 AS number,
contacts_view._id AS contact_id,
contacts_view.photo_uri AS photo_uri,
contacts_view.send_to_voicemail AS send_to_voicemail,
data_id AS data_id,
contacts_view.lookup AS lookup,
contacts_view.display_name AS display_name,
contacts_view.last_time_contacted AS last_time_contacted,
contacts_view.has_phone_number AS has_phone_number,
contacts_view.in_visible_group AS in_visible_group,
contacts_view.photo_file_id AS photo_file_id,
data3 AS label,
contacts_view.starred AS starred,
data4 AS normalized_number,
contacts_view.photo_thumb_uri AS photo_thumb_uri,
contacts_view.in_default_directory AS in_default_directory,
contacts_view.photo_id AS photo_id,
contacts_view.custom_ringtone AS custom_ringtone,
contacts_view._id AS _id,
data2 AS type,
contacts_view.times_contacted AS times_contacted
FROM raw_contacts
JOIN
view_contacts AS contacts_view ON (contacts_view._id = raw_contacts.contact_id),
(
SELECT data_id,
normalized_number,
length(normalized_number) AS len
FROM phone_lookup
WHERE (phone_lookup.min_match = '.....')
)
AS lookup,
data
WHERE (lookup.data_id = data._id AND
data.raw_contact_id = raw_contacts._id AND
(lookup.normalized_number = '+......' OR
lookup.len <= 11 AND
substr('.....', 11 - lookup.len + 1) = lookup.normalized_number OR
(lookup.len > 11 AND
substr(lookup.normalized_number, lookup.len + 1 - 11) = '.....') ) )
ORDER BY length(lookup.normalized_number) DESC