Я хочу получить записи из базы данных SQLite из 3 таблиц.SQLite Android JOIN query
Таблицы Структура
1. tb_contacts Таблица
Он содержит контактную информацию, как идентификатор, имя и адрес электронной почты.
contact_id | contact_name | contact_email
---------- | ------------ | ------------------
1 | Deepak | [email protected]
---------- | ------------ | ------------------
2 | Shivam | [email protected]
2. tb_numbers Таблица
Он содержит номер телефона каждого контакта
id | contact_id | contact_phone
---| ---------- | ------------
1 | 1 | 123456789
---| ---------- | ------------
2 | 1 | 789456123
---| ---------- | ------------
3 | 2 | 456123654
---| ---------- | ------------
4 | 2 | 698521473
3. tb_deleted таблица состояния
эту таблицу conatins статус контакта ли она удалена или нет с user_id , Если в этой таблице содержится строка контакта с определенным user_id, это означает, что контакт удалился для этого пользователя, иначе нет.
id | contact_id | user_id
---| ---------- | --------
1 | 1 | 22201
---| ---------- | --------
2 | 1 | 22202
---| ---------- | --------
3 | 2 | 22201
Что я хочу
1. Пусть пользователю user_id . Он будет получать все контакты, как
contact_id | contact_name | contact_email | contact_phone | deleted
---------- | ------------ | ------------------ | ------------- | -------
1 | Deepak | [email protected] | 123456789 | 1
---------- | ------------ | ------------------ | ------------- | -------
1 | Deepak | [email protected] | 789456123 | 1
---------- | ------------ | ------------------ | ------------- | -------
2 | Shivam | [email protected] | 456123654 | 1
---------- | ------------ | ------------------ | ------------- | -------
2 | Shivam | [email protected] | 698521473 | 1
2. Теперь пользователь с user_id .
contact_id | contact_name | contact_email | contact_phone | deleted
---------- | ------------ | ------------------ | ------------- | -------
1 | Deepak | [email protected] | 123456789 | 1
---------- | ------------ | ------------------ | ------------- | -------
1 | Deepak | [email protected] | 789456123 | 1
---------- | ------------ | ------------------ | ------------- | -------
2 | Shivam | [email protected] | 456123654 | 0
---------- | ------------ | ------------------ | ------------- | -------
2 | Shivam | [email protected] | 698521473 | 0
Что я попробовал
SELECT tb_contacts.contact_id, tb_contacts.contact_name, tb_contacts.contact_email, tb_numbers.contact_phone from tb_contacts join tb_numbers on tb_contacts.contact_id = tb_numbers.contact_id left join tb_deleted on tb_contacts.contact_id = tb_deleted.contact_id;
Она предоставляет мне запись каждого контакта с удаляемым статусом, но без user_id. Как я могу получить требуемые данные с условием user_id. Я использовал предложение WHERE
, но при этом он предоставляет только записи тех контактов, для которых есть запись в таблице tb_deleted
.
Каков наилучший способ или решение, чтобы я мог получить требуемые данные.
Спасибо.
Hi CL., Он работает идеально.Ну, есть ли способ получить список контактов, имеющих одну строку каждого контакта с несколькими номерами телефонов, не с одной строкой каждого контакта с одним номером телефона? –
С группировкой и [group_concat()] (http://www.sqlite.org/lang_aggfunc.html#groupconcat), но это был бы другой вопрос. –
Спасибо. С group_concat() я могу получить требуемый результат. –