小编典典

如何避免列名冲突?

sql

最近,我被分配创建拍卖系统的任务。在我的工作中,我遇到了无数次由于列名不明确而导致包含联接的SQL查询无法执行的情况。考虑以下(简化的)拍卖表结构:

auction

  • id
  • name
  • uid (创建拍卖的用户的ID)

item

  • id
  • name
  • uid (添加项目的用户的ID)
  • aid (有该物品的拍卖的ID)
  • price (初始价格)

user

  • id
  • name

bid

  • id
  • uid (出价的用户的ID)
  • iid (已提高价格的项目)
  • price (优惠价格)

如您所见,有许多列具有冲突的名称。连接这些表需要采取一些措施来消除歧义。

我可以想到两种方法来做到这一点。首先是对列进行重命名,并为所有列加上缩写的表名,以使拍卖ID变为a_id,商品ID变为i_idbid表中的商品ID变为b_i_id。这很可靠,但是会降低列名的可读性。

我可以想到的另一种方法是编写显式查询:

SELECT `bid`.`id`, `user`.`name`, `bid`.`price`
FROM `bid`
JOIN `item` ON `item`.`id` = `bid`.`iid`
JOIN `user` ON `user`.`id` = `bid`.`uid`
JOIN `auction` ON `auction`.`id` = `item`.`aid`
WHERE `bid`.`price` > `item`.`price`
AND `auction`.`id` = 1
GROUP BY `user`.`id`
ORDER BY `bid`.`price` DESC;

这是可读且明确的,但是需要大量的额外击键。

我使用第二种方法,但是也许您在类似情况下成功使用了其他方法?如何避免SQL查询中的列名冲突?


阅读 191

收藏
2021-03-23

共1个答案

小编典典

我的经验是,从长远来看, 额外的击键 所带来的好处远远超过了在短时间内键入它们 花费的时间,而最晚的时候是您需要查看一年左右左右编写的查询时。

2021-03-23