[英]How to select one row before another one - from a two tables SQL?
查詢:
SELECT DISTINCT UNIQUEID,ID
FROM
(
(SELECT UNIQUEID, DATE, ID
FROM stackscontents
WHERE BACKGROUND IS NOT NULL
AND TITLE IS NOT NULL
AND ID < ?
ORDER BY DATE DESC limit 1)
UNION ALL
(SELECT UNIQUEID, DATE, ID
FROM stackscontents
WHERE BACKGROUND IS NOT NULL
AND TITLE IS NOT NULL
AND ID > ?
ORDER BY DATE ASC limit 1)
)
UNION ALL (
(SELECT UNIQUEID, DATE, ID
FROM sharedlinks
WHERE ID < ?
ORDER BY DATE DESC limit 1)
UNION ALL
(SELECT UNIQUEID, DATE, ID
FROM sharedlinks
WHERE ID > ?
ORDER BY DATE ASC limit 1)
) t
准確地說,我試圖在 2 個表中的另一行之前獲取一行。 但我收到如下語法錯誤:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:每個派生表都必須有自己的別名
下面是我使用查詢的代碼:
if (NewDetails == null) {
query2 = "SELECT DISTINCT UNIQUEID,ID FROM ((SELECT UNIQUEID, DATE, ID FROM stackscontents WHERE BACKGROUND IS NOT NULL AND TITLE IS NOT NULL AND ID < ? ORDER BY DATE DESC limit 1) UNION ALL (SELECT UNIQUEID, DATE, ID FROM stackscontents WHERE BACKGROUND IS NOT NULL AND TITLE IS NOT NULL ID > ? ORDER BY DATE ASC limit 1)) UNION ALL "
+ "((SELECT UNIQUEID, DATE, ID FROM sharedlinks WHERE ID < ? ORDER BY DATE DESC limit 1) UNION ALL (SELECT UNIQUEID, DATE, ID FROM sharedlinks WHERE ID > ? ORDER BY DATE ASC limit 1)) t ";
try {
DBConnect Database = new DBConnect();
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
con = Database.getcon();
ps = con.prepareStatement(query2);
ps.setInt(1, minID);
ps.setInt(2, minID);
ps.setInt(3, minID);
ps.setInt(4, minID);
rs=ps.executeQuery();
while(rs.next()) {
minID = rs.getInt(2);
parts[i] = rs.getString(1);
i--;
}
} finally {
if (ps != null)
ps.close();
if (rs != null)
rs.close();
if (con != null)
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
不幸的是,它也沒有返回預期的行 - 1,但它從第一行的 stackscontents 返回 451。 如下:
堆棧內容:
共享鏈接:
你的括號把事情搞砸了。 這是您重新格式化的代碼以顯示原因:
SELECT DISTINCT UNIQUEID,ID
FROM (
(SELECT UNIQUEID, DATE, ID FROM stackscontents WHERE BACKGROUND IS NOT NULL AND TITLE IS NOT NULL AND ID < ? ORDER BY DATE DESC limit 1)
UNION ALL
(SELECT UNIQUEID, DATE, ID FROM stackscontents WHERE BACKGROUND IS NOT NULL AND TITLE IS NOT NULL AND ID > ? ORDER BY DATE ASC limit 1)
)
UNION ALL
(
(SELECT UNIQUEID, DATE, ID FROM sharedlinks WHERE ID < ? ORDER BY DATE DESC limit 1)
UNION ALL
(SELECT UNIQUEID, DATE, ID FROM sharedlinks WHERE ID > ? ORDER BY DATE ASC limit 1)
) t
難怪 SQL 解析器會“嗯?”
你的代碼應該是:
SELECT DISTINCT UNIQUEID,ID
FROM (
(SELECT UNIQUEID, DATE, ID FROM stackscontents WHERE BACKGROUND IS NOT NULL AND TITLE IS NOT NULL AND ID < ? ORDER BY DATE DESC limit 1)
UNION ALL
(SELECT UNIQUEID, DATE, ID FROM stackscontents WHERE BACKGROUND IS NOT NULL AND TITLE IS NOT NULL AND ID > ? ORDER BY DATE ASC limit 1)
UNION ALL
(SELECT UNIQUEID, DATE, ID FROM sharedlinks WHERE ID < ? ORDER BY DATE DESC limit 1)
UNION ALL
(SELECT UNIQUEID, DATE, ID FROM sharedlinks WHERE ID > ? ORDER BY DATE ASC limit 1)
) t
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.