加入3个表,在其他表中有多个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加入3个表,在其他表中有多个值相关的知识,希望对你有一定的参考价值。

我有3张桌子。需要以我得到ResultTbl

的方式加入他们

ProductMaster

PID Name   Cost
1   Car    1000
2   Bike   500

ImageMaster

ImgId PID ImageName
1      1   car1.png
2      1   car2.png
3      1   car3.png
4      2   Bike1.png
5      2   Bike2.png

BidingMaster

ImgId PID BidCost  userid
1      1   2000     1
2      1   2500     2
3      1   3000     1
4      2   1200     1
5      2   900      2

UserMaster

 UserId Username Usertype
   1      Test 1    1
   2      Test 2    2

用户类型

Usertypeid usertypename
1              admin
2              regularuser

我需要以这样一种方式加入他们,即从Imagemaster获得产品成本和第一行的最高金额。

ResultTbl

PID  Name  Cost  ImgName     username usertype
1    Car   3000   Car1.png    Test 1    admin
2    Bike  1200   bike1.png   Test 2    regularuser

[如果某人没有出价,则将显示产品的成本,但如果某人已出价,则将显示最高出价。这将再次与另外2个表一起获得他的用户名和用户类型(简单表)。我已经处理过SQL代码,但是它一直缺少结果。

这是我尝试过的。。

SELECT a.PID ,a.Name, b.maxAmount, d.Img
FROM ProductMaster AS a
LEFT OUTER JOIN (
    SELECT PID, MAX(Amount) AS maxAmount
    FROM BidMaster
    GROUP BY PID
) AS b ON a.PID = b.PID
FULL OUTER JOIN (
    SELECT PID, ImageName AS Img, MAX(ProductId) AS macImg
    FROM ImageMaster
    GROUP BY PID, ImageName
) AS d ON a.PID = d.PID

我有3张桌子。需要以这样的方式加入他们:我得到ResultTbl ProductMaster PID名称成本1汽车1000 2自行车500 ImageMaster ImgId PID ImageName 1 1 car1.png 2 1 ...

答案

加入前,您可以使用子查询从imagemaster获得最大出价主表和第一行

另一答案

因此,您可以使用子查询来获取ImageName,并且需要一个窗口函数来获取相关的BidingMaster行,然后您就可以照常加入。

另一答案

您可以尝试使用窗口功能row_number()

以上是关于加入3个表,在其他表中有多个值的主要内容,如果未能解决你的问题,请参考以下文章

除了它在其他 2 个表中退出

大查询:加入第二个表中的单个最新行

Mysql - 将值插入具有未知主键的多个表中

Redshift 在多个条件下加入,但仅在一个条件不匹配时返回

在 SQLite 中同时向 4 个表中插入数据。如何?

如何根据一个表中的特定值从3个表中删除行[重复]