6

我已经使用 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基本上是对该字段进行索引,以便以后可以将其用作快速搜索 - 即使在巨大的表中,基于主键的确切值进行查询也会非常快速地获得结果。(这也强制每个记录中的字段必须是唯一的。)

在我目前的工作流程中,我会做类似的事情

SELECT * FROM messages;

然后在代码中,对于每条消息,执行:

SELECT * FROM users WHERE UserID = results['UserID'];

这显然听起来效率很低,我知道它可以做得更好。

我想要结束的是一个包含所有字段的结果集messages,除了 UserID 字段,它包含users表中与给定 UserID 匹配的所有字段。

有人可以给我一个关于如何完成这种事情的快速入门吗?

如果重要的话,我使用 SQLite3 作为 SQL 引擎,但我也可能想在 MySQL 上执行此操作。

谢谢!

4

1 回答 1

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 
于 2013-07-29T05:44:42.403 回答