1

我有一个索引表,其中包含一个 content_id 和类型列。(例如 content_id=1,type=audio。content_id=1,type=video)是否可以根据 content_id 从正确的表(表:contentvideo、contentaudio)中获取正确的数据?

4

2 回答 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

你试过CASE还是IF?

http://dev.mysql.com/doc/refman/6.0/en/case-statement.html

于 2009-08-23T18:23:30.747 回答