【问题标题】:Joining 2 tables with multile rows连接具有多行的 2 个表
【发布时间】:2016-10-05 03:07:33
【问题描述】:

我有两张桌子。

Main 
Id Name
1  abc
2  efg

Image
MainId ImagePath
1        ..//
1        ..//
2        ..//
1        ..//
2        ..//

我需要将这两个表组合起来以获取以 MainId 作为键的单行。它可以与图像表中的任何随机图像链接。

但目前当我加入时,它会加入并显示 Image 表中的所有行。

SELECT a.Id,b.ImagePath FROM Main a, Image b  WHERE a.Id=b.MainId  

【问题讨论】:

    标签: sql-server join group-by


    【解决方案1】:

    另一种选择随机图像的方法是 ....

    Select m.ID , I.ImagePath
    FROM Main m 
     CROSS APPLY (SELECT TOP 1 ImagePath
                  FROM Image
                  WHERE MainId = m.ID
                  ORDER BY NEWID()
                  ) I(ImagePath)
    

    【讨论】:

      【解决方案2】:

      您可以使用相关查询:

      SELECT t.id,
             (SELECT s.ImagePath FROM Image s
              WHERE t.id = s.MainId
              LIMIT 1) as imagePath
      FROM Main t
      

      或者只是加入一个派生表,其中每个 ID 包含一个 imagePath

      SELECT t.id,s.ImagePath
      FROM Main t
      INNER JOIN(SELECT s.MainId,max(s.ImagePath) as max_im
                 FROM Image s
                 GROUP BY s.MainId) tt
       ON(t.id = tt.max_un)
      

      【讨论】:

      • 恐怕这不是随机选择的图像。
      • 其实,“它可以与任何随机图像链接”意味着它不必是随机值——他不在乎是哪一个。
      • ...“任何随机”可以我MAX/MIN 或任何其他值,如果他要求随机选择,那是完全不同的事情:) 或者我误解了他。
      • 完全......随机值是MINMAX 但始终MAX 值不是随机的它是MAX :)
      • 是的,我明白你在说什么,但你不明白我的意思。我把这个问题理解为“我不在乎我会得到什么价值”,所以即使它不是随机的,也没关系。
      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 2020-01-04
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2014-03-06
      相关资源
      最近更新 更多