我有一个索引表,其中包含一个content_id并键入colomn。
(例如,content_id = 1,类型=音频。content_id = 1,类型=视频)是否可以从正确的表(表:contentvideo,contentaudio)中基于content_id获得正确的数据?

最佳答案

我认为您想通过单个select语句检索内容?如果内容表的布局完全相同,则可以使用UNION

SELECT ca.* FROM contentaudio ca, indextable it
 WHERE ca.content_id = it.content_id
   AND it.content_type = 'audio'
UNION
SELECT cv.* FROM contentvideo cv, indextable it
 WHERE cv.content_id = it.content_id
   AND it.content_type = 'video'
ORDER BY content_id /* or whatever */


请注意,如果content_id在所有content表中不是唯一的,则可能会为同一content_id获得多个(不同类型的)记录。还要注意,如果您要基于某些indextable键选择特定记录,则需要将其添加到联合的每个部分。

如果content表具有不同的布局,则可以改用OUTER JOIN并将各种内容类型作为一条记录的一部分检索(缺少的内容类型将作为NULL返回):

SELECT * FROM indextable it
  LEFT OUTER JOIN contentaudio ca ON it.content_id = ca.content_id
  LEFT OUTER JOIN contentvideo cv ON it.content_id = cv.content_id
 WHERE it.some_key = ?


请注意,在这种情况下根本不涉及content_type(对于UNION选择,您也不需要它)。

关于mysql - MySQL多选,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1319176/

10-11 07:15