0

当我包含以下 SQL 时会挂起:

"LEFT OUTER JOIN un.users ass "
"ON assignsr.ProfileKey = ass.ID or assignsr.ProfileKey = ass.legacy_ProfileKey "

有没有更好的连接方式?我对 SQL 不是很熟悉,所以查询可能存在多个问题。

u"SELECT "
    "COALESCE(ass.Email, ass.Username) as assignee, "
    "COALESCE(reporter.Email, reporter.Username) as Reporter, "
    "tb_status.statType as resolution, "
    "tb_substatus.statType as status, "
    # "assignsr.ProfileKey as assignee, "
    "CONCAT(req.CompanyID, ' - ', companyname.Name) as CompanyName, "
    "GROUP_CONCAT(DISTINCT REPLACE(attachments.Location, ' ', '%20')) as 'attachment1', "
    "software.Name as 'Product', "
    "GROUP_CONCAT(DISTINCT DATE_ADD(trailsr.TrailDate, INTERVAL -4 HOUR), ';', trailsr.ProfileKey, ';', trailsr.Description ORDER BY trailsr.TrailDate ASC SEPARATOR 'x|x|x|x') as zComment0, "
"FROM "
    "help.req "
"LEFT OUTER JOIN un.users reporter "
    "ON req.user_ID = reporter.ID "        
"LEFT OUTER JOIN un.office companyname "
    "ON req.office_ID = companyname.ID "        
"LEFT OUTER JOIN help.attachments "
    "ON req.SRID = attachments.SRID "
"LEFT OUTER JOIN un.software "
    "on req.software_ID = software.ID "        
"LEFT OUTER JOIN help.tb_status "
    "ON req.StatusID = tb_status.statID "
"LEFT OUTER JOIN help.tb_status AS tb_substatus "
    "ON req.SubStatusID = tb_substatus.statID "
"LEFT OUTER JOIN help.assignsr "
    "ON req.SRID = assignsr.SRID AND "
    "assignsr.OrderNbr = '1' "
"LEFT OUTER JOIN help.trailsr "
    "ON req.SRID = trailsr.SRID "
"LEFT OUTER JOIN un.users ass "
    "ON assignsr.ProfileKey = ass.ID or assignsr.ProfileKey = ass.legacy_ProfileKey "
"WHERE "
    "req.CompanyID NOT LIKE 'ABC%' AND "
    "req.SRID != '0' "
"GROUP BY "
    "req.SRID"
4

1 回答 1

1

FWIW,我觉得这更容易阅读......

SELECT COALESCE(ass.email, ass.username) assignee
     , COALESCE(reporter.email, reporter.username) reporter
     , tb_status.stattype resolution
     , tb_substatus.stattype status
     , CONCAT(req.companyid, ' - ', o.name) companyname
     , REPLACE(a.location, ' ', '%20') attachment1
     , w.name product
     , t.traildate + INTERVAL -4 HOUR
     , t.profilekey
     , t.description 
  FROM help.req  
  LEFT 
  JOIN un.users reporter 
    ON req.user_ID = reporter.id         
  LEFT 
  JOIN un.office o 
    ON req.office_id = o.id
  LEFT 
  JOIN help.attachments a
    ON a.srid = req.srid 
  LEFT 
  JOIN un.software w
    ON w.id = req.software_id 
  LEFT 
  JOIN help.tb_status 
    ON tb_status.statid = req.statusid 
  LEFT 
  JOIN help.tb_status tb_substatus 
    ON tb_substatus.statid = req.substatusid 
  LEFT 
  JOIN help.assignsr 
    ON assignsr.srid = req.srid 
   AND assignsr.ordernbr = 1
  LEFT 
  JOIN help.trailsr t
    ON t.srid = req.srid 
  LEFT 
  JOIN un.users ass 
    ON assignsr.profilekey IN(ass.id,ass.legacy_profilekey 
 WHERE req.companyid NOT LIKE 'ABC%' 
   AND req.SRID != 0
 ORDER 
    BY req.srid
     , t.traildate ASC 

这里没有 group_concat 聚合,因为我更喜欢在应用程序代码中处理这种事情。

于 2020-04-15T12:16:07.963 回答