我有两张桌子,'照片'和'视频'。它们几乎完全相同,除了一列,“照片”中的“photoID”和“视频”中的“videoID”。
当用户进行搜索时,我希望视频结果与照片结果混合,显然是来自同一记录集。
如何使用不同的列名进行此操作?如果不是,我是否在两个表中将列名更改为contentID,并使用UNION加入它们?改变列需要做很多工作,但如果不可能的话就必须这样做......
答案 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