我有一个索引表,其中包含一个 content_id 和类型列。(例如 content_id=1,type=audio。content_id=1,type=video)是否可以根据 content_id 从正确的表(表:contentvideo、contentaudio)中获取正确的数据?
misterm
问问题
1656 次
2 回答
1
我认为您想通过单个 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 select 也不需要它)。
于 2009-08-23T18:51:29.083 回答
0
于 2009-08-23T18:23:30.747 回答