Как я могу определить столбцы при ВЫБОРЕ из нескольких таблиц с JDBC?

У меня есть две таблицы, к которым я присоединяюсь на идентификационном столбце, они похожи:

+-------+
| users |
+----+--+---+
| id | name |
+----+------+

+-------+
| posts |
+-------+------+---------+
| id | user_id | message |
+----+---------+---------+

И теперь я хочу выбрать все сообщения и включать имя пользователя, с:

SELECT * FROM posts, users WHERE user_id = users.id

И затем я пытаюсь получить значения с:

ResultSet rs = // SQL
if(rs.next()) {
    rs.getInt("posts.id");
    ...
}

Но я добираюсь SQLException при выполнении rs.getInt("posts.id") :

java.sql.SQLException: Column 'posts.id' not found.

Как я могу получить значения от SQL-запроса выше использования JDBC и JavaDB/Derby как база данных?

Как я могу различать id столбец в users и posts таблица при получении значений с ResultSet?

8
задан Jonas 3 June 2010 в 22:49
поделиться

3 ответа

Вы пытаетесь получить значение id , но используете "posts.id" для ссылки на него. Не делайте этого

Все, что вам нужно, это имя или псевдоним столбца, а также имя таблицы:

ResultSet rs = // SQL
if(rs.next()) {
  rs.getInt("id");
  ...
}

Это сработало бы, если бы само имя столбца было «posts.id», но я рекомендую использовать подчеркивание (_) вместо точки, если вы решите обновить таблицу.

Но у меня есть столбец идентификаторов в обеих таблицах, как мне их различить?


Вам нужно указать псевдоним столбца:

SELECT p.id AS post_id,
       p.name,
       u.id AS users_id, 
       p.user_id, --redundant due to relationship, omit if possible
       u.message
  FROM POSTS p
  JOIN USERS u ON u.id = p.user_id

... и указать этот псевдоним столбца в коде Java:

ResultSet rs = // SQL
if(rs.next()) {
  rs.getInt("post_id");
  ...
}
10
ответ дан 5 December 2019 в 17:34
поделиться

Псевдонимы имен столбцов

SELECT
    posts.id posts_id,
    name name,
    id id,
    user_id,
    message
FROM posts 
INNER JOIN users 
    ON posts.user_id = users.id

в зависимости от вашего вкуса sql, этот псевдоним может быть

posts.id as posts_id
0
ответ дан 5 December 2019 в 17:34
поделиться

Решение 1: используйте псевдоним

select u.id as uid, u.name, p.id as post_id, p.user_id, p.message from
users u inner join posts p on u.id=p.user_id

Решение 2: удалите дубликат user.id так как он уже есть в таблице записей

select p.user_id, u.name, p.id as post_id, p.message from
users u inner join posts p on u.id=p.user_id
2
ответ дан 5 December 2019 в 17:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: