两个表。一些重叠的字段名。加入查询。同一列名称出现两次。我想将表名作为列名的前缀添加,以使其更易于阅读。我正在使用通配符*,我想继续在解决方案中使用通配符。
查询可能是这样的:
SELECT *
FROM Loan l JOIN
LoanInstallment li
ON l.LoanId = li.LoanId
结果的归档名称可能是这样的:
LoanID | Amount | Date | LoanID | Amount | Date |
… records
我想去哪里
l.LoanID | l.Amount | l.Date | li.LoanID | li.Amount | li.Date |
… records
这应该很容易做到,因为很明显SQL的字段名相同没有问题,因此每列都有一个不可见的表名。
如何显示表名作为列名的前缀?
冬至
答案 0 :(得分:1)
所需的名称不是默认名称,因此您需要显式设置它们。另外,这些不是“标准”,因此需要进行转义。列的转义符因数据库而异,但是大多数数据库都支持标准双引号。
所以:
SELECT l.LoanID as "l.LoanID",
l.Amount as "l.Amount",
l.Date as "l.Date",
li.LoanID as "li.LoanID", -- totally unnecessary because it is the same as l.LoanId
li.Amount as "li.Amount",
li.Date as "li.Date"
FROM Loan l JOIN
LoanInstallment li
ON l.LoanId = li.LoanId;
SQL Server传统上使用方括号([]'
)而不是双引号来转义标识符,但它也支持标识符。
答案 1 :(得分:0)
您可以使用下面的查询获取用逗号分隔的字段列表,然后将其复制并粘贴到查询中:
SELECT T.Name as Table_Name,
'L.'+C.Name+' AS ''L.'+C.Name+''', ' as Column_Name,
'LI.'+C.Name+' AS ''LI.'+C.Name+''', ' as Column_Name
FROM sysobjects T
INNER JOIN syscolumns C
ON T.ID = C.ID
WHERE T.Name LIKE '%Airlines%';
下有关数据字典用法的更多技巧
答案 2 :(得分:0)
使用以下查询在一行中获取列名。
DECLARE @allcolname NVARCHAR(MAX)='';
SELECT @allcolname = @allcolname + 'L.' + C.Name +' AS ''L.'+C.Name+''', '
FROM sysobjects T
INNER JOIN syscolumns C ON T.ID = C.ID
WHERE T.Name ='Users';
SELECT @allcolname