我已经使用SQL多年,但从未真正利用它的潜力。
对于这个例子,我们说我有两张桌子:
CREATE TABLE messages (
MessageID INTEGER NOT NULL PRIMARY KEY,
UserID INTEGER,
Timestamp INTEGER,
Msg TEXT);
CREATE TABLE users (
UserID INTEGER NOT NULL PRIMARY KEY,
UserName TEXT,
Age INTEGER,
Gender INTEGER,
WebURL TEXT);
据我了解,PRIMARY KEY
基本上对该字段编制索引,以便以后可以将其用作快速搜索 - 基于主键的确切值查询即使在巨大的表中也能非常快速地获得结果。 (这也强制说明每个记录中的字段必须是unqiue。)
在我目前的工作流程中,我会做类似
的事情SELECT * FROM messages;
然后在代码中,对于每条消息,执行:
SELECT * FROM users WHERE UserID = results['UserID'];
这显然效率非常低,我知道它可以做得更好。
我想要最终得到的是一个包含messages
中所有字段的结果集,除了代替UserID字段,它包含users
表中的所有字段匹配给定的UserID。
有人可以给我一个关于如何完成这类事情的快速入门书吗?
如果重要,我使用SQLite3作为SQL引擎,但我也想在MySQL上这样做。
谢谢!
答案 0 :(得分:4)
不确定所要求的订单,但您可以对其进行调整
只需JOIN
UserID
个表格
SELECT MESSAGES.*,
USERS.USERNAME,
USERS.AGE,
USERS.GENDER,
USERS.WEBURL
FROM MESSAGES
JOIN USERS
ON USERS.USERID = MESSAGES.USERID
ORDER BY MESSAGES.USERID,
MESSAGES.TIMESTAMP