外键不输出查询数据

时间:2017-11-14 14:58:02

标签: java mysql jdbc

try {
    Statement s = conn.createStatement();
    ResultSet result2 = s.executeQuery("Select Distinct * From Poem p,Recording r Where r.PoemTitle = p.PoemTitle AND r.poemTitle = 'poem1'");
    System.out.print("Result (Select with Join): ");
    while (result2.next()) {
        System.out.println(result2.getString(1)+ " " + result2.getString(2)+ result2.getString(3));
    }
} catch(Exception e) {
    System.out.print(e.getMessage());
}

我正在尝试输出诗歌及其录制日期。当它运行时它输出诗歌然后给出创建诗而不是录制的日期?这是因为这种关系吗?

1 个答案:

答案 0 :(得分:2)

很可能是因为SELECT列表中的*

按照您希望返回的顺序指定要返回的列。

我们只是猜测包含"日期记录的列的名称"它列在哪个表格中:

SELECT p.PoemTitle
     , r.dateRecorded
     , r.readBy
  FROM Poem p
  JOIN Recording r
    ON r.PoemTitle = p.PoemTitle
 WHERE r.poemTitle = 'poem1'
 GROUP
    BY p.PoemTitle
     , r.dateRecorded
     , r.readBy
 ORDER 
    BY p.PoemTitle
     , r.dateRecorded DESC
     , r.readBy

注意:

抛弃连接操作的旧式逗号语法,改为使用JOIN关键字,并将连接谓词从WHERE子句重定位到ON子句。

避免在SELECT列表中使用*。显式列出要返回的列/表达式。当我们读取代码和SQL语句时,我们不知道返回了多少列,列的顺序是什么,或者数据类型是什么。 (我们必须查看表格定义。)

显式列出要返回的列/表达式只需要一些工作。如果只编写代码,那就没问题了,省时间写。但是代码的读取速度是写入的十倍。 (而*的SQL语句使得getString(1)引用哪一列的SQL语句几乎无法解读。

列出columns列也可以提高数据库的效率,使用几列和几十列的结果集来准备结果集,并且我们还将一个较小的结果集从数据库传输到客户端。使用列的子集,我们更有可能使用覆盖索引进行查询。