MySQL视图将3个字段链接到另一个表中具有不同值的相同字段

MySQL视图将3个字段链接到另一个表中具有不同值的相同字段,mysql,Mysql,我有两个表,users和user\u images。在用户表中,每个用户有3个大小,由用户表中的外键标识,该外键是用户图像表的主键。因此,用户、小图像id、中图像id和用户、大图像id都引用了用户图像表中的不同行。 我正在尝试编写一个视图,其中您所看到的是每个图像大小的image\u url,medium\u image\u url,以及large\u image\u url。如何将这些列的值与同一个表区分开来?谢谢你的帮助 因此,生成的视图模式最终看起来像 user_id | user

我有两个表,
users
user\u images
。在
用户
表中,每个用户有3个大小,由
用户
表中的外键标识,该外键是
用户图像
表的主键。因此,
用户、
小图像id
、中图像id
用户、大图像id
都引用了
用户图像
表中的不同行。 我正在尝试编写一个视图,其中您所看到的是每个图像大小的
image\u url
medium\u image\u url
,以及
large\u image\u url
。如何将这些列的值与同一个表区分开来?谢谢你的帮助

因此,生成的视图模式最终看起来像

    user_id | user_name | small_image_url | medium_image_url | large_image_url

我认为您必须在这里三次使用
user\u images
表加入
users

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。使用内部联接可能会导致用户从结果集中删除,这可能不是您想要的。相反,我列出了缺少的URL的
'NA'

您需要三次连接到user\u 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;
连接就是这样:它并排地粘在一起,连接中每个表中的一行


如果要将多个行添加到此视图中,则需要多个联接。

您实际上希望视图中有三个单独的url列,还是一列?是的,有三个url列。