有没有一种简单的方法来替换MySQL中列值的ID引用?

时间:2011-09-13 16:00:47

标签: mysql

这听起来很简单,可能就是......

好吧,我有两张桌子usersmessages。 格式如下:

users
ID | username
1  | im_a_user
2  | another_user

messages
ID | FROM | TO | CONTENT
1  | 1    | 2  | Blah blah blah...
2  | 2    | 1  | Hello, World!
3  | 2    | 1  | Another message.

如果您没有猜到,列FROMTO是对ID表中users的引用。

无论如何,我想做一个返回类似的查询:

ID | FROM         | TO           | CONTENT
1  | im_a_user    | another_user | Blah blah blah...
2  | another_user | im_a_user    | Hello, World!
3  | another_user | im_a_user    | Another message.

我之前用JOINS做过这个,但是我有点生疏了,我想知道是否有更简单的方法..如果没有,使用JOIN的查询就可以了

2 个答案:

答案 0 :(得分:2)

JOIN完全存在于这样的事情中。您需要这样的查询:

SELECT
    m.id,
    sender.username AS sender,
    recipent.username AS recipient,
    m.content
FROM messages m
    INNER JOIN users sender
    ON sender.id = `m.from`
    INNER JOIN users recipent
    ON recipient.id = m.to

如果NULLTO列上有FROM,请将适当的INNER JOIN更改为LEFT OUTER JOIN

作为旁注,我建议您不要使用FROM之类的SQL保留字作为列名。

答案 1 :(得分:0)

我想一些联接将是最好的方法。

从我的头顶......这样的事情?

SELECT messages.ID, from_user.username, to_user.username, messages.CONTENT FROM messages
LEFT JOIN users as from_user ON (messages.FROM = users.ID)
LEFT JOIN users as to_user ON (messages.TO = users.ID)