是否可以使用 SELECT * FROM table_name WHERE column_name = 'value' 其中 'value' 可能出现在多行中?

Is it possible to use SELECT * FROM table_name WHERE column_name = 'value' where 'value' might appear in more than one row?

我正在尝试创建一个屏幕来显示特定客户的购买历史记录。我的 'Sales' table 包含列 "TicketNumber"、"CustomerID"、"InventoryNo"、"Description"、"Cost"、"Retail"、"IndividualSubTotal"、"IndividualTax"、"IndividualTotal"、"SaleSubTotal"、"SaleTax" 和 "SaleTotal"。

出于此屏幕的目的,我只需要(现在)"TicketNumber"、"CustomerID"、"InventoryNo"、"Retail"、"IndividualTax"、和 "IndividualTotal".

现在,我正在尝试通过客户的 ID 拉入信息。我的最终目标是将票号放在 table 中,但我只希望它出现一次。我想我能弄清楚这一点。但是现在,这就是我遇到的问题。

    try {
        Class.forName("org.h2.Driver");
        Connection connection = DriverManager.getConnection("jdbc:h2:./RetailApplicationDatabase;AUTO_SERVER=TRUE");

        String sql;
        Statement stmt;

        sql = "SELECT distinct TicketNumber FROM Sales WHERE CustomerID = '" + CustomerNoNumberLabel.getText() + "';";
        stmt = connection.createStatement();

        ResultSet results = stmt.executeQuery(sql);

        DefaultTableModel model = (DefaultTableModel) TicketNumberTable.getModel();
        String TicketNumber;

        while(results.next()) {
            TicketNumber = results.getString("TicketNumber");

            model.insertRow(TicketNumberTable.getRowCount(), new Object[] {TicketNumber});
        }
    } catch (SQLException | ClassNotFoundException ex) {
        Logger.getLogger(ViewHistoryDialog.class.getName()).log(Level.SEVERE, null, ex);
    }

如您所见,虽然有更多结果,但我想继续在我的 table 中插入一行。 CustomerID 将出现在客户所拥有的尽可能多的不同项目和票号中。

当我编译程序时,我在输出日志中没有收到错误,但我没有看到任何内容被放入 table。我认为这可能是我尝试按照的顺序执行操作,所以现在,我在此对话框上有一个按钮,上面写着 "Load",当按下该按钮时,上面的代码就会运行。

我的问题在哪里?为什么我没有看到任何东西被添加到 table?

预先感谢您提供任何有用的回复。

编辑(01/28/2015 - 8:03 上午 MST):销售已添加到数据库中的 'Sales' table。假设客户购买了库存编号 1、2 和 3,并且他们是第一个购买的客户,因此票号为 1。三行添加到 'Sales' table,因为每个库存编号和 TicketNumber 列在所有三行中的值为“1”。然后我试图检索此信息并将其显示在 jTable 中。我想在 jTable TicketNumberTable 中显示票号。但是我的 ResultSet 没有检索票号。

编辑(01/28/2015 - 8:11 AM MST):我更改了代码以引入不同的 TicketNumber 值。但是,这不是我主要关心的问题,因为我仍在努力让我的 ResultSet 检索信息。

你的问题有点含糊,只输入一次票号。这是否意味着给定的客户?还是针对所有客户?如果是后者,您应该将其强制执行为 TicketNumberTable.

的唯一约束

其次,您可以在一条语句中执行 selectinsert。不需要 运行 多次查询和循环。类似于:

INSERT INTO TicketNumberTable(TicketNumber)
    SELECT distinct TicketNumber
    FROM Sales
    WHERE CustomerID = '. . .';

或者也许:

INSERT INTO TicketNumberTable(TicketNumber)
    SELECT distinct TicketNumber
    FROM Sales
    WHERE TicketNumber NOT IN (SELECT TicketNumber FROM TicketNumberTable) AND
          CustomerID = '. . .';

哇,我确定了这个问题...而且没有人能够看到它...我直接在 H2 控制台中进行了 SQL 查询。当 table 显示时,我注意到我的 CustomerNo 列在数字前包含一个“”(space)。这是因为我在提取客户编号时使用了子串,而子串少了一个字符,即space。如果我不深入研究并开始分析,我永远不会注意到它。

感谢所有帮助过我的人。保重。