首页 文章

MySQL Left连接4个表,空行重复

提问于
浏览
-1

我坚持一个查询,我将以结果向后开始,以防这显而易见,然后提供更多细节 .

用户关注跟随供应商的赞助商,我正在尝试使用用户标识显示所有产品,其中存在用户标识的赞助供应商产品,没有用户标识为NULL .

Desired result (userid = 1):
productid |  supplierid  |  userid
    1            1            1
    2            1            1
    3            2           Null
    4            3            1
    5            2           Null
    6            3            1

Actual result (userid = 1):
productid |  supplierid  |  userid
    1            1            1
    1            1           Null
    2            1            1
    2            1           Null
    3            2           Null
    4            3            1
    4            3           Null
    5            2           Null
    6            3            1
    6            3           Null

我的查询:

SELECT product.productid, product.supplierid, usersponsor.userid FROM product 
INNER JOIN supplier ON product.supplierid = supplier.supplierid
LEFT JOIN sponsorsupplier ON sponsorsupplier.supplierid = product.supplierid
LEFT JOIN usersponsor ON usersponsor.sponsorid = sponsorsupplier.sponsorid and usersponsor.userid = 1

我有4张桌子

sponser
supplier
product
myuser

有了这两个链接表:

usersponsor
sponsorsupplier

示例表:

myuser:userid
  1
  2
  3
  4
  5

Sponsor:sponsorid
  1
  2
  3

Supplier:supplierid
  1
  2
  3

usersponsor
userid     |   sponsorid
  1        |       1     <- user 1 follows sponsor 1
  2        |       2
  2        |       3

sponsorsupplier
sponsorid  |   supplierid
  1        |       1     <- supplys product 1,2 (sponsor 1)
  1        |       3     <- supplys product 4,6 (sponsor 1)
  2        |       2 
  2        |       1
  3        |       3     


Product
productid  |  supplierid
  1        |      1       <-
  2        |      1       <-
  3        |      2
  4        |      3       <-
  5        |      2
  6        |      3       <-

谢谢你的帮助 .

1 回答

  • 0

    您可以聚合子查询:

    SELECT
        p.productid
      , p.supplierid
      , ss.userid
    FROM Product p
    LEFT JOIN (
            SELECT
                ss.supplierid
              , MIN( us.userid ) userid
            FROM sponsorsupplier ss
            INNER JOIN usersponsor us ON ss.sponsorid = us.sponsorid
            WHERE us.userid = 1
            GROUP BY
                ss.supplierid
        ) ss ON p.supplierid = ss.supplierid
    ORDER BY
        p.productid;
    

相关问题