我有3个名为Message,File和Document的表。
消息列 - Pid,MessageId,MName,MContent
文件列 - FileId,MessageId,尺寸,类型
Documen t列 - FileId,DocumentPath,DocumentName
情景:
单条消息可以有多个文件,也可以没有文件。我需要选择 Mname,Mcontent,FileId,DocumentName并以表格格式显示给UI。
select
M.Mname as Name,Mcontent,D.FileId,D.DocumentName
FROM Message M
inner Join File F
ON F.MessageID=M.MessageID
inner join document D
ON D.fileId=f.fileId
WHERE M.PID='6AE3B832'
但是没有得到预期的结果。 Pid将始终包含多个messageID。
任何人都可以建议实现这一结果。
预期结果如下,
<table border="1">
<th>Mname</th>
<th>Mcontent</th>
<th>Fileid</th>
<th>Documentname</th>
<tr>
<td>1st message</td>
<td>1st mesage content</td>
<td>001</td>
<td>message.pdf</td>
</tr>
<tr>
<td>1st message</td>
<td>1st mesage content</td>
<td>002</td>
<td>userManual.doc</td>
</tr>
<tr>
<td>2nd message</td>
<td>2nd mesage content</td>
<td>null</td>
<td>null</td>
</tr>
<tr>
<td>3rd message</td>
<td>3rd mesage content</td>
<td>003</td>
<td>policy.xlsx</td>
</tr>
</table>
答案 0 :(得分:1)
select
M.Mname as Name,Mcontent,D.FileId,D.DocumentName
FROM Message M
LEFT JOIN File F
ON F.MessageID=M.MessageID
LEFT JOIN document D
ON D.fileId=f.fileId
WHERE M.PID='6AE3B832'
如果使用内部联接,则两个表必须具有匹配的记录。左连接只需要表Message有记录。