8

ID列で結合する2つのテーブルがあります。それらは次のようになります。

+-------+
| 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.

JDBC と JavaDB/Derby をデータベースとして使用して、上記の SQL クエリから値を取得するにはどうすればよいですか?

で値を取得するときに、とテーブルのid列をどのように区別できますか?userspostsResultSet

4

5 に答える 5

10

値を取得しようとして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");
  ...
}
于 2010-06-03T22:39:22.783 に答える
2

解決策 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: 既に posts テーブルに含まれているため、重複した 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
于 2010-06-03T22:51:46.113 に答える
0

列名のエイリアス

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
于 2010-06-03T22:54:17.170 に答える
-2

列名で取得するのではなく、列インデックスごとにデータを取得することで、これらをさらに簡素化できます..!! DBから取得したデータは、selectステートメントに従って列の順序で結果セットに格納されるため、列名に従ってデータを取得するのではなく、結果セットの列インデックスに従ってデータをフェッチすることを好みます..

元:

String query = " select age,num from table_abc";
ResultSet rs= statement.executeQuery(query);

while(rs.next){
   int var1= rs.getInt(1);
   int var2= rs.getInt(2);
}

これらは、データベース テーブル内の類似した列名が原因で生じる複雑さと混乱を解消するのに役立ちます..

これらが役立つことを願っています...

ではごきげんよう..!!

于 2013-03-16T08:38:18.420 に答える