SQLite搜索两个表

时间:2017-06-11 16:03:35

标签: sqlite

在SQLite数据库中,我创建了两个表:

CREATE Table Master (ItemID VARCHAR PRIMARY KEY, Property VARCHAR)
CREATE Table Counter (OtherID VARCHAR PRIMARY KEY, ItemID VARCHAR)

桌上记录Master:
* ItemID:书,财产:大号 * ItemID:表,属性:绿色

桌上记录柜台:
* OtherID:random1,ItemID:Book
* OtherID:random2,ItemID:Book
* OtherID:random3,ItemID:Book

表Master上的ItemID列与表Counter上的同名列具有相同的内容。

从表Master获取所有行的正确SQL select语句是什么?按表计数器中的记录数排序?

在这种情况下,行" Book"在表格中有三个计数,应该列在第一个位置,而行"表格"没有计数,应该是第二个结果。

我知道如何在一个表上执行此操作,但从未设法获得跨越两个表的SQL select语句。

感谢任何帮助。

顺便说一下:我无法改变表结构;所以不确定是否会有更好的东西,但我必须按原样使用表格。

2 个答案:

答案 0 :(得分:1)

  • 附加到两个不同的数据库
  • 使用“db?”访问表。在前面
  • 在公共语义上加入两个表,即ItemId
  • 左连接以获得“空”行,“0”计数
  • 制作表示输出中所需行的组,也就是ItemId
  • 分组允许使用聚合函数“count()”
  • 根据所需的输出顺序,即通过计数,但是下降到先得到“3”
  • 选择ItemId和属性以匹配所需的输出

代码:

attach 'master.db' as dbm;
attach 'counter.db' as dbc;
select a.ItemId, property
from dbm.Master a LEFT JOIN dbc.Counter b 
using (ItemId) 
group by a.ItemId 
order by count(OtherId) desc;

经过测试:

echo .dump | sqlite3 counter.db

BEGIN TRANSACTION;
CREATE TABLE Counter (OtherID VARCHAR PRIMARY KEY, ItemID VARCHAR);
INSERT INTO Counter VALUES('random1','book');
INSERT INTO Counter VALUES('random2','book');
INSERT INTO Counter VALUES('random3','book');
COMMIT;

echo .dump | sqlite3 master.db

BEGIN TRANSACTION;
CREATE TABLE Master (ItemID VARCHAR PRIMARY KEY, Property VARCHAR);
INSERT INTO Master VALUES('book','large');
INSERT INTO Master VALUES('table','green');
COMMIT;

输出:

book|large
table|green

答案 1 :(得分:0)

如果我理解你,我认为这应该有效:

SELECT M.ItemId, Property 
FROM Master M 
LEFT JOIN Counter C 
ON M.itemid=C.itemid 
GROUP BY C.itemid 
ORDER BY COUNT(C.itemid) DESC;