Справка по SQL-запросу: Как я могу получить значение столбца из другой таблицы? - PullRequest
2 голосов
/ 31 июля 2011
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.user_id = users.id.

Если я выберу user_id из сообщений, я получу только целочисленное значение. Но я хочу получить эквивалентное значение varchar из таблицы пользователей.

Это будет SQL-запрос на присоединение. Как я могу это сделать?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 31 июля 2011

это должно сработать

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 голос
/ 31 июля 2011

Вам действительно нужно использовать соединение (скорее всего, inner join, здесь) между вашими двумя таблицами:

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


Таким образом, для каждого сообщения вы получите информацию о соответствующем пользователе - и вы можете добавить любое поле, которое хотите, от users до select части запроса.

1 голос
/ 31 июля 2011

Попробуйте этот запрос:

 SELECT Posts.ID, Posts.Title, Users.UserName 
 FROM Posts INNER JOIN Users ON Posts.User_ID = Users.ID
0 голосов
/ 31 июля 2011

Попробуйте это:

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

Если имя столбца является неоднозначным (например, id), вы можете добавить к имени таблицы префикс, как показано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...