Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite:如何对表中每个ROWID的引用进行计数,然后插入计数_Sql_Sqlite - Fatal编程技术网

SQLite:如何对表中每个ROWID的引用进行计数,然后插入计数

SQLite:如何对表中每个ROWID的引用进行计数,然后插入计数,sql,sqlite,Sql,Sqlite,我需要一些帮助来编写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_

我需要一些帮助来编写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;

看起来您可以按如下方式使用该命令:

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      
SELECT * FROM items;

item_id       ref_co
------------  ------
1             4     
2             2     
3             1     
4             2  
增加一些进一步的项目:

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             3     
2             2     
3             1      
SELECT * FROM items;

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

看起来您可以按如下方式使用该命令:

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      
SELECT * FROM items;

item_id       ref_co
------------  ------
1             4     
2             2     
3             1     
4             2  
增加一些进一步的项目:

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             3     
2             2     
3             1      
SELECT * FROM items;

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