我想簡化我的代碼,將選擇邏輯從Java移動到MySQL並且還想將兩個查詢簡化爲一個。MySQL添加條件邏輯和組合SELECT
我有player_id_1
列的兩個表marriage_data
和player_id_2
然後,我有player_data
與player_id
列和username
鑑於從方法的整數,我想搜索在player_id_1
列marriage_data
和player_id_2
的比賽
如果我在player_id_1
找到一場比賽,我想獲得player_id_2
如果我在player_id_2
找到一場比賽,我想獲得player_id_1
與ID檢索到的,我想選擇player_data
username
當檢索到的ID等於player_id
目前我使用這個代碼讓我期望的結果:
private String getSpouse(Connection conn, int id) throws SQLException {
try (PreparedStatement ps = prepare(conn, "SELECT * FROM `marriage_data` WHERE `player_id_1` = ? OR `player_id_2` = ?", id, id)) {
ResultSet marriageData = ps.executeQuery();
while (marriageData.next()) {
int one = marriageData.getInt("player_id_1");
int two = marriageData.getInt("player_id_2");
if (one > 0 && two > 0) {
int spouseId = one != id ? one : two;
try (PreparedStatement ps2 = prepare(conn, "SELECT * FROM `player_data` WHERE `player_id` = ?", spouseId)) {
ResultSet rs2 = ps2.executeQuery();
while (rs2.next()) {
return rs2.getString("username");
}
}
}
}
}
return null;
}
我真的需要從這個混亂的java + 2mysql查詢轉移到單個MySQL查詢。任何指導或協助將不勝感激。
編輯:
`player_data` structure
+-----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------+----------------+
| player_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(32) | NO | | NULL | |
`marriage_data` structure
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| player_id_1 | int(11) | NO | MUL | NULL | |
| player_id_2 | int(11) | NO | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
Sample data from `player_data`
+-----------+-------------+
| player_id | username |
| 48616 | player2 |
+-----------+-------------+
| player_id | username |
| 69054 | player1 |
Sample data from `marriage_data`
+-----+-------------+-------------+
| id | player_id_1 | player_id_2 |
+-----+-------------+-------------+
| 233 | 48616 | 69054 |
+-----+-------------+-------------+
在所提供的示例:
鑑於48616它應該返回PLAYER1
鑑於69054它應該返回player2
好極了。請參閱JOIN。 – Strawberry
請提供您的表結構的一些樣本數據和預期的結果,我會給你查詢 –
@ user3130834 - 檢查我的答案。其工作 –