我有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相关的任何内容
答案 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
(对于与另一个表中的任何内容都不匹配的状态),则需要左连接。但是,事实似乎并非如此。