MySQL /搜索两个表

时间:2011-09-30 21:10:21

标签: mysql sql database database-design

我有两张桌子,'照片'和'视频'。它们几乎完全相同,除了一列,“照片”中的“photoID”和“视频”中的“videoID”。

当用户进行搜索时,我希望视频结果与照片结果混合,显然是来自同一记录集。

如何使用不同的列名进行此操作?如果不是,我是否在两个表中将列名更改为contentID,并使用UNION加入它们?改变列需要做很多工作,但如果不可能的话就必须这样做......

5 个答案:

答案 0 :(得分:5)

您不必更改表格中的列名称。只需在SELECT上使用别名即可。我会使用UNION ALL(效率高于UNION,因为它不会尝试消除欺骗)并添加一个额外的列来确定内容的来源。

SELECT photoID AS contentID, colA, colB, ..., 'photo' AS ContentType
    FROM photos
UNION ALL
SELECT videoID AS contentID, colA, colB, ..., 'video' AS ContentType
    FROM videos

答案 1 :(得分:1)

Select * from
(
SELECT VideoID as MediaID, * FROM Videos
UNION
SELECT PhotoID as MediaID, * FROM Photos
) as T
WHERE MediaID = ?

答案 2 :(得分:1)

使用与

类似的东西
select photoID AS ContentID, col1, col2 FROM PHOTOS WHERE col1 =...
UNION
select videoID AS ContentID, col1, col2 FROM VIDEOS WHERE col1 =...

答案 3 :(得分:1)

select column1, column2, NULL videoID, photoID 
from photos
where criteria = 'criteria'

union all

select column1, column2, videoID, NULL photoID 
from videos
where criteria = 'criteria'

答案 4 :(得分:1)

如果您希望在不显示photoID和videoID的情况下建立联盟,可以这样做:

SELECT column names from Videos 
UNION
SELECT column names from Photos