У меня есть две таблицы, к которым я присоединяюсь на идентификационном столбце, они похожи:
+-------+
| 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
?
Вы пытаетесь получить значение 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");
...
}
Псевдонимы имен столбцов
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
Решение 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