簡體   English   中英

如何從左連接中刪除冗余字段

[英]how to remove redundant field from left join

我有以下查詢從兩個不同的表中獲取消息和圖像。 這里有一條消息可以有多個圖像

因為我寫了以下查詢,它正常工作並顯示以下結果

select msg.messageid, msg.message, msg.sentby, msg.adddate, 
p_i.image_id ,p_i.small_pic_path 
from user_messages as msg
LEFT JOIN post_images as p_i
on msg.messageid=p_i.messageid
where msg.messageid='zpx1btrpvpa1360154523078'
order by msg.adddate desc

輸出是

 messageid  message  sentby  adddate  image_id  small_pic_path
   1         abc      aa      12/2/12   6          /sdf/sdf
   1         abc      aa      12/2/12   7          /asdf/df
   1         abc      aa      12/2/12   8          /cxd/sxc
   1         abc      aa      12/2/12   9          /zz/szz

這里由adddate發送的messageid消息正在重復,並且在jsp頁面中顯示,顯示總共4個不同的消息。

但是我想用相關的消息細節顯示4個imageid和small_pic_path(基於消息ID)

我希望顯示為

1)消息已發送
這條消息的所有small_pic_path消息都是id

1)消息已發送
這條消息的所有small_pic_path消息都是id

2)消息發送
這條消息的所有small_pic_path消息都是id

3)消息發送
這條消息的所有small_pic_path消息都是id

這是使用JOIN時的預期行為,您將獲得跨產品。

如果要折疊行,請使用GROUP BY和相應的列。 在你的情況下,它可能是:

GROUP BY messageid, message, sentry, adddate

如果沒有真正了解您的要求,請寫下:

但我想用一個消息細節顯示4個imageid和small_pic_path

你想如何顯示這些記錄?

假設您的意思是在同一行,那么請考慮使用GROUP_CONCAT

SELECT msg.messageid, msg.message, msg.sentby, msg.adddate, 
  group_concat(p_i.image_id separator ';') imageids,
  group_concat(p_i.small_pic_path separator ';') picpaths
FROM ...

這是一個用於演示結果的SQL小提琴

如果您想以不同的方式顯示結果,您可能應該通過UI處理它。

祝你好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM