I have two tables that I join on the id-column, they look like:
+-------+
| users |
+----+--+---+
| id | name |
+----+------+
+-------+
| posts |
+-------+------+---------+
| id | user_id | message |
+----+---------+---------+
And now I want to select all posts and include the username, with:
SELECT * FROM posts, users WHERE user_id = users.id
And then I try to get the values with:
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("posts.id");
...
}
But I get SQLException
when executing rs.getInt("posts.id")
:
java.sql.SQLException: Column 'posts.id' not found.
How can I get the values from the SQL-query above using JDBC, and JavaDB/Derby as database?
How can I distinguish between the id
column in the users
and posts
table when retrieving values with ResultSet
?
You're attempting to retrieve the id
value, but you're using "posts.id" to reference it. Don't
All you need is the column name or alias, not the table name as well:
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("id");
...
}
It would've worked if your column name itself was "posts.id", but I recommend using underscore (_) instead of a period should you choose to update the table.
You need to specify a column alias:
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
...and reference that column alias in the Java code:
ResultSet rs = // SQL
if(rs.next()) {
rs.getInt("post_id");
...
}
Solution 1 : use alias
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
Solution 2: remove the duplicate user.id since you already have it in the posts table
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With