Выберите количество из ссылочного столбца

#database #sqlite

#База данных #sqlite

Вопрос:

У меня есть следующие таблицы:

   CREATE TABLE ips(
    ip TEXT PRIMARY KEY,    
    blocked INTEGER(1) DEFAULT 0
  );
  
  CREATE TABLE acc(
    ip TEXT NOT NULL,
    time INTEGER(4) DEFAULT (CAST(strftime('%s','now') AS INT)),
    FOREIGN  KEY(ip) REFERENCES ips(ip) ON DELETE CASCADE  
  );  
  

Как я могу получить список IP-адресов из первой таблицы, которые имеют blocked = 1 и 0 связанных строк в таблицах «acc»?

SELECT ip FROM ips WHERE blocked = 1 AND ...

Ответ №1:

вы можете использовать левое внешнее соединение.

пример: выберите * из ip-адресов левое внешнее соединение acc b на a.ip =b.ip, где a.blocked = 0 и b.ip равно нулю

Ответ №2:

Вы можете использовать NOT EXISTS :

 select i.* from ips i
where i.blocked = 1
and not exists (select 1 from acc a where a.ip = i.ip)
  

или, если вам нужен только столбец, ip используйте EXCEPT :

 select ip from ips where blocked = 1
except
select ip from acc