[英]HSQLDB Subquery - Java
在Microsoft Access中,我有三个有效的查询-
qryAwayMatches:
SELECT MatchTeam.FootballMatchID, MatchTeam.TeamID, MatchTeam.GameType, MatchProtocol.MatchTeamID, MatchProtocol.GoalNumber, MatchProtocol.YellowCardNumber, MatchProtocol.RedCardNumber
FROM MatchTeam LEFT JOIN MatchProtocol ON MatchTeam.ID = MatchProtocol.MatchTeamID
WHERE (((MatchTeam.GameType)="Away"));
qryHomeMatches:
SELECT MatchTeam.FootballMatchID, MatchTeam.TeamID, MatchTeam.GameType, MatchProtocol.MatchTeamID, MatchProtocol.GoalNumber, MatchProtocol.YellowCardNumber, MatchProtocol.RedCardNumber
FROM MatchTeam LEFT JOIN MatchProtocol ON MatchTeam.ID = MatchProtocol.MatchTeamID
WHERE (((MatchTeam.GameType)="Home"));
qryMatchResult:
SELECT qryHomeMatches.FootballMatchID, qryHomeMatches.TeamID AS HomeTeamID, qryAwayMatches.TeamID AS AwayTeamID, qryHomeMatches.GoalNumber AS HomeTeamGoals, qryAwayMatches.GoalNumber AS AwayTeamGoals, [HomeTeamGoals]>[AwayTeamGoals] AS HomeTeamWin, [HomeTeamGoals]=[AwayTeamGoals] AS NoWin, [HomeTeamGoals]<[AwayTeamGoals] AS AwayTeamWin
FROM qryHomeMatches INNER JOIN qryAwayMatches ON qryHomeMatches.FootballMatchID = qryAwayMatches.FootballMatchID;
在我的Java程序中,按以下方式显示按钮按下时前两个查询的结果:
btnqryAwayMatches.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
String s;
JFrame frame;
String url = "jdbc:hsqldb:file:db_data/myFootballDB;ifexists=true;shutdown=true";
String username = "SA";
String password = "";
try {
con = DriverManager.getConnection(url, username, password);
st = con.createStatement();
s = "SELECT MATCHTEAM.FOOTBALLMATCHID, MATCHTEAM.TEAMID, MATCHTEAM.GAMETYPE, "
+ "MATCHPROTOCOL.MATCHTEAMID, MATCHPROTOCOL.GOALNUMBER, "
+ "MATCHPROTOCOL.YELLOWCARDNUMBER, "
+ "MATCHPROTOCOL.REDCARDNUMBER "
+ "FROM MATCHTEAM LEFT JOIN MATCHPROTOCOL ON MATCHTEAM.ID = MATCHPROTOCOL.MATCHTEAMID "
+ "WHERE (((MATCHTEAM.GAMETYPE)='Away'));";
rs = st.executeQuery(s);
ResultSetMetaData rsmt = rs.getMetaData();
int c = rsmt.getColumnCount();
Vector<String> column = new Vector<String>(c);
for (int i = 1; i <= c; i++) {
column.add(rsmt.getColumnName(i));
}
Vector<Vector<String>> data = new Vector<Vector<String>>();
Vector<String> row = new Vector<String>();
while (rs.next()) {
row = new Vector<String>(c);
for(int i = 1; i <= c; i++) {
row.add(rs.getString(i));
}
data.add(row);
}
frame = new JFrame();
frame.setTitle("Away Match Results");
frame.setSize(700,420);
frame.setLocationByPlatform(true);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
JPanel panel = new JPanel();
JTable table = new JTable(data, column);
JScrollPane jsp = new JScrollPane(table);
panel.setLayout(new BorderLayout());
panel.add(jsp, BorderLayout.CENTER);
frame.setContentPane(panel);
frame.setVisible(true);
} catch(Exception exc) {
exc.printStackTrace();
JOptionPane.showMessageDialog(null, "Error");
} finally {
try {
st.close();
rs.close();
con.close();
} catch(Exception exception) {
JOptionPane.showMessageDialog(null, "Error close");
}
}
}
});
如何编写第三个查询以在单击按钮时执行? 我知道它需要知道要执行的前两个查询的结果,所以我不确定如何编程。
您可以使用WITH子句轻松完成此操作:
WITH qryAwayMatches AS (SELECT MatchTeam.FootballMatchID, ...),
qryHomeMatches AS (SELECT MatchTeam.FootballMatchID, ...)
SELECT qryHomeMatches.FootballMatchID, ...
将每个查询的全文放在上面的模板中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.