SELECT CASE WHEN createduser = 112
THEN (createdplayerpts AS you AND connectedplayerpts AS them)
ELSE (connectedplayerpts AS you AND createdplayerpts AS them)
FROM game WHERE (turn = ?)
錯誤點:CASE ... THEN (col1 AS alias1 AND col2 AS alias2) —— 括號內不能直接放多個 AS 別名,且 AND 是邏輯運算子,非欄位分隔符。
SELECT
CASE WHEN createduser = ? THEN createdplayerpts ELSE connectedplayerpts END AS you,
CASE WHEN createduser = ? THEN connectedplayerpts ELSE createdplayerpts END AS them
FROM game
WHERE turn = ?
CASE 運算式。?)防止 SQL 注入,且效能更好。AS you、AS them 放在各自運算式結尾。String sql = "SELECT " +
"CASE WHEN " + DBHelper.COLUMN_CRE_USER + " = ? THEN " + DBHelper.COLUMN_CRE_PTS + " ELSE " + DBHelper.COLUMN_CON_PTS + " END AS you, " +
"CASE WHEN " + DBHelper.COLUMN_CRE_USER + " = ? THEN " + DBHelper.COLUMN_CON_PTS + " ELSE " + DBHelper.COLUMN_CRE_PTS + " END AS them " +
"FROM " + DBHelper.TABLE_GAME + " WHERE turn = ?";
Cursor c = db.rawQuery(sql, new String[]{
String.valueOf(userId), // for first CASE
String.valueOf(userId), // for second CASE
String.valueOf(turn)
});
rawQuery 參數綁定,避免手動拼接字串導致注入或格式錯誤。