Java 使用内部联接将多个sql查询转换为单个查询
我有以下java代码:Java 使用内部联接将多个sql查询转换为单个查询,java,sql,join,Java,Sql,Join,我有以下java代码: ArrayList<MessageMap> ids = getNewMail(UserID, type, maxIdMessage); Message[] message = new Message[ids.size()]; if(ids.size()>0){ ResultSet rs; int j =0; for(MappaMessaggi i : ids){ pstmt = conn.prepareStatement("
ArrayList<MessageMap> ids = getNewMail(UserID, type, maxIdMessage);
Message[] message = new Message[ids.size()];
if(ids.size()>0){
ResultSet rs;
int j =0;
for(MappaMessaggi i : ids){
pstmt = conn.prepareStatement("SELECT * FROM Messaggi WHERE MessageID = ?");
pstmt.setInt(1, i.getMessageID());
rs = pstmt.executeQuery();
rs.next();
.
.
.
}
我知道只需一个查询就可以做到这一点,但我不知道如何。。有人能睁开我的眼睛吗?:)谢谢
编辑:我尝试:
SELECT i.*
FROM Messaggi AS i
INNER JOIN MessageMap AS p i.MessageID = p.MessageID
WHERE p.MessageID = 1 AND p.UserID = 1 AND p.TipoID = 2
但我发现:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'i.MessageID = p.MessageID WHERE p.MessageID = 1 AND p.UserID = 1 AND p.TipoID = ' at line 3
根据您的问题和查询,我找到的简单解决方案可能是此查询(可能还有其他列与您的表相关) 另外,请指定您是否需要这3个参数,或者无法发送任何参数。请尝试以下操作:
SELECT i.*, p.*
FROM Messaggi i
INNER JOIN MessageMap p ON i.MessageID = p.MessageID
WHERE i.MessageID = ? AND p.UserID = ? AND p.TipoID = ?
老实说,可能只是
Messaggi.
。@JackTurky,对不起,我忘了,请参阅我的编辑。它应该是i.MessageID=p.MessageID
上的internal JOIN MessageMap p,而不是internal JOIN MessageMap p i.MessageID=p.MessageID
。
SELECT A.*
FROM MessageMap A
INNER JOIN Message B on A.MessageId = B.MessageId
WHERE
A.UserId = ?
AND A.TipoID = ?
AND A.MessageId = ?
SELECT i.*, p.*
FROM Messaggi i
INNER JOIN MessageMap p ON i.MessageID = p.MessageID
WHERE i.MessageID = ? AND p.UserID = ? AND p.TipoID = ?