SQL查询帮助:如何从其他表中获取列值?

时间:2011-07-31 12:41:23

标签: mysql sql postgresql

mysql> describe posts;
    +-------------+--------------+------+-----+---------+----------------+
    | Field       | Type         | Null | Key | Default | Extra          |
    +-------------+--------------+------+-----+---------+----------------+
    | id          | int(11)      | NO   | PRI | NULL    | auto_increment |
    | user_id     | int(11)      | NO   |     | NULL    |                |
    | title       | varchar(255) | NO   |     | NULL    |                |
    | body        | text         | YES  |     | NULL    |                |
    | created     | datetime     | YES  |     | NULL    |                |
    | modified    | datetime     | YES  |     | NULL    |                |
    | category_id | int(11)      | NO   |     | NULL    |                |
    | tags        | varchar(50)  | NO   |     | NULL    |                |
    +-------------+--------------+------+-----+---------+----------------+
    8 rows in set (0.00 sec)

    mysql> describe users;
    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | id       | int(11)      | NO   | PRI | NULL    | auto_increment |
    | username | varchar(255) | NO   | UNI | NULL    |                |
    | password | char(40)     | NO   |     | NULL    |                |
    | group_id | int(11)      | NO   |     | NULL    |                |
    | created  | datetime     | YES  |     | NULL    |                |
    | modified | datetime     | YES  |     | NULL    |                |
    +----------+--------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)

我正在尝试从posts表中选择列ID,标题和来自users表的用户名,其中posts.user_id = users.id。

如果我从帖子中选择user_id,我将只获得整数值。 但我想从users表中获取等效的varchar值。

这将是一个加入SQL查询。 我怎么能这样做?

提前致谢。

4 个答案:

答案 0 :(得分:2)

这应该可以解决问题

SELECT p.id, p.title, u.UserName 
FROM posts p 
INNER JOIN users u ON p.user_id = u.id

SELECT p.id, p.title, u.UserName    
FROM posts p,users u
WHERE p.user_id = u.id

SELECT p.id, p.title, (select u.UserName FROM users u WHERE p.user_id = u.id)
FROM posts p 

按优先顺序

答案 1 :(得分:1)

您确实需要在两个表之间使用连接(很可能是inner join,此处)

select posts.id, posts.title, users.username
from posts
    inner join users on users.id = posts.user_id


有了这个,对于每个帖子,您将获得相应的用户信息 - 您可以将users中的任何字段添加到查询的select部分。

答案 2 :(得分:1)

尝试此查询:

 SELECT Posts.ID, Posts.Title, Users.UserName 
 FROM Posts INNER JOIN Users ON Posts.User_ID = Users.ID

答案 3 :(得分:0)

试试这个:

select posts.id, title, username
from posts join users
  on posts.user_id = users.id

如果列名不明确(例如,id),则可以在其前面加上表名,如上所示。