在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语句。
感谢任何帮助。
顺便说一下:我无法改变表结构;所以不确定是否会有更好的东西,但我必须按原样使用表格。答案 0 :(得分:1)
代码:
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;