基于同一表的mysql选择查询

axr492tv  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(309)

我有一个mysql表promotions主字段是promotionmaintenanceid(primary)pid promotionid promotionname
我有一个特例,其中一个记录的promotionid(这将是主记录)成为其他一些记录的pid。我需要创建一个mysql语句来获取promotionmaintenanceid(主记录的)、promotionid(主记录的)、promotionname(主记录的)和promotionid(所有主记录的pid=promotionid)的记录

PromotionMaintenanceID ,PID , PromotionID ,PromotionName
1  | T1  | 12 | Promo1
2  | 12  | 22 | PromoSub
3  | 12  | 33 | PromoSub2

我需要这样的结果

PromotionMaintenanceID | PID | PromotionID | PromotionName | Sub PromoID
1  | T1  | 12 | Promo1  |22,33

有人知道该怎么查询吗?

p3rjfoxz

p3rjfoxz1#

此查询(sqlfiddle)应该执行您想要的操作:

SELECT p1.PromotionMaintenanceID, p1.PID, p1.PromotionID, p1.PromotionName, GROUP_CONCAT(p2.PromotionID) AS `Sub PromoID`
FROM promotions p1
JOIN promotions p2
ON p2.PID = p1.PromotionID
GROUP BY p1.PromotionID

输出:

PromotionMaintenanceID  PID     PromotionID     PromotionName   Sub PromoID
1                       T1      12              Promo1          33,22
mspsb9vt

mspsb9vt2#

为此,你应该能够做一个直接连接(或双选取决于你最喜欢的方式)

SELECT
  a.PromotionID,
  a.MaintenanceId,
  a.PromotionName,
  GROUP_CONCAT(b.PID) as SubIds
FROM
  PromotionTable a
LEFT JOIN
  PromotionTable b
ON
  a.PromotionID = b.PID
//ADD AND's here with a.(column) = b.PID if you absolutely need all the ID's for each column to link up
GROUP BY
  a.PromotionID, a.MaintenanceID, a.PromotionName

相关问题