2016-11-29 78 views
1

我有2个表,usersuser_images。在users表中,每个用户有3个大小,这些大小由users表中的外键标识,该表是user_images表的主键。所以users.small_image_id,users.medium_image_idusers.large_image_id都引用user_images表中的不同行。 我正在尝试编写一个视图,其中您看到的所有视频均为image_url,其中每个图像大小分别为small_image_url,medium_image_urllarge_image_url。我该如何区分同一个表中的这些列的值?感谢您的帮助!MySQL视图链接3个字段到另一个表中的相同字段具有不同的值

所以结果视图模式最终会看起来像......

user_id | user_name | small_image_url | medium_image_url | large_image_url 
+0

你真的想在你的视图中有三个单独的url列,还是只有一列? –

+0

是的,3个URL列。 – MikeTrottman

回答

1

您需要连接三次user_images表,以将三个图像大小组合为同一行中的相应用户的列。

CREATE VIEW AS users_with_their_images AS 
    SELECT u.id, 
    uis.url AS small_image_url, 
    uim.url AS medium_image_url, 
    uil.url AS large_image_url 
    FROM users AS u 
    LEFT OUTER JOIN user_images uis ON uis.id = u.small_image_id 
    LEFT OUTER JOIN user_images uim ON uim.id = u.medium_image_id 
    LEFT OUTER JOIN user_images uil ON uil.id = u.large_image_id; 

这就是件事联接:它并排粘在一起,侧面,每个表一个行的加入。

如果你想多行添加到这个,那么你需要多个连接。

1

我认为你必须加入usersuser_images表三次在这里:

CREATE VIEW user_image_urls AS 
SELECT u.user_id, 
     u.user_name, 
     COALESCE(t1.small_image_url, 'NA'), 
     COALESCE(t2.medium_image_url, 'NA'), 
     COALESCE(t3.large_image_url, 'NA') 
FROM users u 
LEFT JOIN user_images t1 
    ON u.small_image_id = t1.small_image_id 
LEFT JOIN user_images t2 
    ON u.medium_image_id = t2.medium_image_id 
LEFT JOIN user_images t3 
    ON u.large_image_id = t3.large_image_id 

我在这里使用左连接来允许某些用户可能没有定义给定的URL。使用内部联接可能会导致用户从结果集中删除,这可能不是您想要的。相反,我列出'NA'以查找缺少的网址。

相关问题