筛选记录城市和州

时间:2018-08-12 02:41:44

标签: sql

我有2个表,名称分别为城市和州

city

id_city |  name_city         
   1    |   JED
   2    |   RUD
   3    |   DMM

状态

id_state  |  id_for_city | name_state
     1    |      1       | JED1
     2    |      1       | JED2
     3    |      2       | RUH1
     4    |      2       | RUH2

我使用了ComboBox,我有2个

第一个组合框1选择name_city(可以)

第二个combobox2我想通过id_for_city选择name_state,但它退出了加入id_city的行列(这里不行)

我如何通过在Java中使用左联接来编写查询?

我的代码:

我首先觉得comboBox1好吧

public void Filecombo() {

    try {

        String sql = "select name_city from  city";

        pstmt = conn.prepareStatement(sql);

        rs = pstmt.executeQuery();

        while (rs.next()) {

            options.add(rs.getString("name_city"));

        }
        comboCity.setItems(options);

        pstmt.close();
        rs.close();

    } catch (SQLException e) {

        e.printStackTrace();

    }

}

第二个comboBox2(此处为问题)

public void Filecombo2() {

    try {

        String sq2 = " select name_state from state left  join city on city.id_city= state.id_from_city";

        pstmt2 = conn.prepareStatement(sq2);

        rs = pstmt2.executeQuery();

        while (rs.next()) {

            options2.add(rs.getString("name_state"));

        }

        comboBranch.setItems(options2);
        pstmt.close();
        rs.close();

    } catch (SQLException e) {

        e.printStackTrace();

    }

}
  

结果如果我想选择RUH或DMM或JED等不同城市   combobox2将会出现与combobox1相关的任何内容

1 个答案:

答案 0 :(得分:1)

您的问题似乎与Java没有太大关系,并且我认为您的JDBC代码基本上可以正常工作,并且您已经在获取结果集,尽管可能与您想要的不完全相同。我认为您只需要在查询中添加WHERE子句:

SELECT c.name_state
FROM state s
INNER JOIN city c
    ON c.id_city = s.id_for_city
WHERE
    s.name_city = 'JED';

请注意,我只用内部联接替换了左联接,因为您只需要来自city表的状态名。如果您想返回NULL(对于与另一个表中的任何内容都不匹配的状态),则需要左连接。但是,事实似乎并非如此。