sql – 如何在使用JDBC从多个表中进行SELECT时标识列?

我有两个表加入id-column,它们看起来像:
+-------+
| 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");
    ...
}

但是在执行rs.getInt(“posts.id”)时我得到了sqlException:

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

如何使用JDBC和JavaDB / Derby作为数据库从上面的SQL查询获取值?

使用ResultSet检索值时,如何区分用户和posts表中的id列?

解决方法

您正在尝试检索id值,但您使用“posts.id”来引用它.别

您只需要列名或别名,而不是表名:

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

如果您的列名称本身是“posts.id”,它会起作用,但如果您选择更新表,我建议使用下划线(_)而不是句点.

但是我在两个表中都有一个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 a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...