Как я могу объединить две таблицы и вернуть строки с не совпадает. В sqlite

#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 )