我已经使用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);
Run Code Online (Sandbox Code Playgroud)
据我所知,PRIMARY KEY基本上对该字段编制索引,以便以后可以将其用作快速搜索 - 基于主键的确切值查询即使在巨大的表中也能非常快速地获得结果.(这也强制说明每个记录中的字段必须是unqiue.)
在我目前的工作流程中,我会做类似的事情
SELECT * FROM messages;
Run Code Online (Sandbox Code Playgroud)
然后在代码中,对于每条消息,执行:
SELECT * FROM users WHERE UserID = results['UserID'];
Run Code Online (Sandbox Code Playgroud)
这显然听起来非常低效,我知道它可以做得更好.
我最终想要的是一个包含所有字段的结果集messages,除了代替UserID字段,它包含users表中与给定UserID匹配的所有字段.
有人可以给我一个关于如何完成这类事情的快速入门书吗?
如果重要的话,我使用SQLite3作为SQL引擎,但我也想在MySQL上做这个.
谢谢!
不确定所请求的顺序,但您可以调整它。
只是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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1061 次 |
| 最近记录: |