我可以在jet(访问)的连接中为列添加前缀吗?

时间:2009-06-29 23:02:00

标签: sql ms-access

我有一个演示应用程序,使用带有Access / Jet后端的php。我有这些(简化的)表格:

People
------
ID
BankID    // foreign key in Banks
Name
Address

Banks
--------
ID
Name
Address

我正在加入:

SELECT * FROM People LEFT JOIN on People.BankID = Banks.ID

避免姓名冲突的最佳方法是什么?这有效:

SELECT People.*, 
Banks.ID as BankID, 
Banks.Name as BankName, 
Banks.Address as BankAddress 
FROM People LEFT JOIN on People.BankID = Banks.ID

但是当你有多列时,它会变得很糟糕。有没有办法说“使用'Bank'为Banks表中的所有列添加前缀”?

3 个答案:

答案 0 :(得分:2)

不,虽然您可以使用别名来缩短表名。

嗯,现在可能为时已晚,但我使用的字段命名约定完全避免了重复的字段名称。 Tony's Table and Field Naming Conventions有些人喜欢它。有些人已经独立提出了相同的解决方案。其他人讨厌它。耸肩

如果您使用查询构建器,那么当您查看它生成的SQL语句时,Access会为您输入所有表名。

答案 1 :(得分:0)

您可以打开“我的列前缀”功能,但由于您已经在使用PHP,因此使用适当的“AS”关键字生成SQL应该非常简单。只需循环遍历所需的字段和表格,并进行一些字符串比较。

正如Tony所说,如果您使用查询构建器,Access将自动执行此操作,因此,如果您的查询是预定义的,则可以让Access为您执行此操作。

答案 2 :(得分:0)

使用表格相关名称(俗称“别名”)来限定SQL中的列,例如此处P1B1是相关名称:

SELECT P1.*,
       B1.ID AS BankID,
       B1.Name AS BankName,
       B1.Address AS BankAddress
  FROM People AS P1
       LEFT OUTER JOIN Banks AS B1
          ON P1.BankID = B1.ID;