#android #sqlite
#Android #sqlite
Вопрос:
У меня есть две таблицы Table1 и Table 2 с идентификатором 3 столбцов, именем и mac-адресом, а во второй таблице у меня также есть столбец с именем mac.
То, что мне нужно, это то, что в таблице 1 у меня есть 10 записей, а в таблице 2 у меня всего 5 записей, и мне нужны записи, которых нет в table2.
Как я могу это сделать в sqlite android? Любая помощь будет оценена. Заранее спасибо…
Спасибо, что нашли время, чтобы прочитать это
В имени таблицы я добавляю имя из второго класса
этот запрос предназначен для sql, и мне нужно для sqlite
SELECT T1.*
FROM T1
WHERE NOT EXISTS(SELECT NULL
FROM T2
WHERE T1.ID = T2.ID
AND T1.Date = T2.Date
AND T1.Hour = T2.Hour)
Комментарии:
1. Я не пробовал это сам, так что не могли бы вы попробовать :
SELECT T1.* FROM T1 LEFT JOIN T2 on T1.ID = T2.ID AND T1.Date = T2.Date AND T1.Hour = T2.Hour WHERE T2.ID is null
2. Я добавляю имя таблицы из второго класса?
3. я понятия не имею, что такое второй класс, здесь вопрос о том, как переписать sql, я полагаю
Ответ №1:
Это должно работать с SQLite, хотя и неэффективно.
Если ID делает то, что он должен делать, затем проверяет наличие T1.Date = T2.Date и T1.Hour = T2.Hour может быть не учтен.
Лучший способ с помощью JOIN:
SELECT T1.*
FROM T1
LEFT JOIN T2 ON T1.ID = T2.ID
WHERE T2.ID IS NULL;
Комментарии:
1. в этом запросе я могу получить имя таблицы из другого класса, например, выбрать идентификатор, имя из mainactivity.collect, где main activity — это имя моего класса, а collect — строковая переменная, могу ли я это сделать?
2. @Badprince Вы, кажется, путаете Java и SQL. Я не уверен, что вы хотите сказать: если вы имеете в виду, что хотели бы присвоить таблицам, столбцам или значениям или чему-то еще в вашей базе данных то же имя, что и имя, которое вы дали своей активности Android, это явно возможно. Почему бы и нет?
3. запросы будут выглядеть следующим образом sqlite.rawquery (ВЫБЕРИТЕ T1. * ИЗ T1 СЛЕВА ПРИСОЕДИНИТЬСЯ К T2 НА T1.ID = T2.ID ГДЕ T2.ID РАВНО НУЛЮ); ???
4. Я не слишком уверен, но я думаю, что rawQuery принимает как минимум два аргумента… Попробуйте добавить аргумент с типом String[] . (Например, напишите новую строку [] .)
5. Хорошо, большое спасибо, что уделили время 🙂
Ответ №2:
вы указываете условие на основе ссылочного ключа (я предположил, что MAC)
Select T1.ID, T1.Name From Table1 T1 LEFT JOIN From Table2 T2 on T1.Mac=T2.Mac where T2.Mac is NULL.
или
SELECT id, name
FROM Table2
WHERE NOT EXISTS
(SELECT *
FROM Table2
WHERE Table1.Mac = Table2.Mac)
Комментарии:
1. в этом запросе я могу получить имя таблицы из другого класса, например, выбрать идентификатор, имя из mainactivity.collect, где main activity — это имя моего класса, а collect — строковая переменная, могу ли я это сделать?
Ответ №3:
SELECT *
FROM T1
WHERE T1.name NOT IN (SELECT name FROM T2 )
——————- Или сделайте это для большего ограничения—————————
SELECT *
FROM T1
WHERE T1.name NOT IN (SELECT name FROM T2 ) and
T1.mac NOT IN (SELECT mac FROM T2 )