我有一个索引表,其中包含一个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/