SQLite: как посчитать ссылки на каждый ROWID в таблице, а затем вставить количество - PullRequest
1 голос
/ 02 июля 2010

Мне нужна помощь в написании оператора SQL. У меня есть две таблицы в базе данных SQLite:

CREATE TABLE users (
  user_id INTEGER PRIMARY KEY,
  item_id INTEGER
);

CREATE TABLE items (
  item_id INTEGER PRIMARY KEY,
  ref_count INTEGER
);

Я ищу оператор SQLite, который будет похож на следующий псевдокод:

for each row in items
    items[ row ].ref_count = SELECT COUNT(users.item_id) 
                               FROM users 
                              WHERE users.item_id=row;

1 Ответ

1 голос
/ 02 июля 2010

Похоже, что вы можете использовать команду REPLACE следующим образом:

REPLACE INTO  items (item_id, ref_count)
SELECT        item_id, COUNT(*) AS ref_count
FROM          users
GROUP BY      item_id;

Контрольный пример:

INSERT INTO users VALUES (1, 1);
INSERT INTO users VALUES (2, 1);
INSERT INTO users VALUES (3, 1);
INSERT INTO users VALUES (4, 2);
INSERT INTO users VALUES (5, 2);
INSERT INTO users VALUES (6, 3);

Результат после выполнения запроса REPLACE:

SELECT * FROM items;

item_id       ref_co
------------  ------
1             3     
2             2     
3             1      

Добавление дополнительных предметов:

INSERT INTO users VALUES (7, 1);
INSERT INTO users VALUES (8, 4);
INSERT INTO users VALUES (9, 4);

И после повторного выполнения запроса REPLACE:

SELECT * FROM items;

item_id       ref_co
------------  ------
1             4     
2             2     
3             1     
4             2  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...