一尘不染

在联接中,如何在所有列名之前添加其来源表的前缀

mysql

我正在分析一个相当糟糕的旧数据库/代码库,试图通过将查询合并到联接中来减少服务器负载(包括电子邮件警报cron作业,该作业通常会调用超过一百万个单独的查询)。

SELECT * FROM 
class_alerts_holding ah 
INNER JOIN class_listings l ON l.id = ah.lid 
INNER JOIN class_users u ON u.id = ah.uid
LEFT JOIN class_prodimages pi ON pi.pid = ah.lid

这会吐出120列…

aid | id | lid | uid | oid | catName | searchtext | alertfreq | listType | id | owner | title | section | shortDescription | description | featured | price | display | hitcount | dateadded | expiration | url | notified | searchcount | repliedcount | pBold | pHighlighted | notes | ...

为了帮助我分析如何构造新查询,如果我可以在结果中的列前面加上来自JOIN的表的前缀,那就太好了。

class_alerts_holding.aid | class_alerts_holding.id | class_listings.lid | ...

有没有办法做到这一点?


阅读 330

收藏
2020-05-17

共1个答案

一尘不染

你可以

select ah.*, l.*, u.*, pi.* from ...

那么这些列将至少按表顺序返回。

为了更好地区分每两列列,您还可以添加“ delimiter”列,如下所示:

select ah.*, ':', l.*, ':', u.*, ':', pi.* from ...

(已编辑,删除了不必要的显式别名,请参阅注释。)

2020-05-17