gpt4 book ai didi

mysql - 如何避免列名冲突?

转载 作者:可可西里 更新时间:2023-11-01 06:52:59 24 4
gpt4 key购买 nike

我最近被分配了一项创建拍卖系统的任务。在我的工作中,我遇到过许多情况,其中包含连接的 SQL 查询由于列名不明确而无法执行。考虑拍卖的这个(简化的)表结构:

拍卖:

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

项目:

  • id
  • 姓名
  • uid(添加该项目的用户的 ID)
  • aid(元素可用的拍卖 ID)
  • 价格(初始价格)

用户:

  • id
  • 姓名

出价:

  • id
  • uid(出价用户的 ID)
  • iid(已涨价的商品)
  • price(报价)

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

我可以想到两种方法来做到这一点。首先是重命名列,在所有列前加上一个缩写的表名,这样拍卖 ID 将变为 a_id,项目 ID 将变为 i_id,项目 ID 在bid 表将变为 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 查询中的列名冲突?

最佳答案

也许你可以尝试使用 aliases在表名上?

select * from table1 as T1
join table2 as t2 on (t1.key=t2.foreignkey)

关于mysql - 如何避免列名冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5090513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com