SQL Server内部连接冲突列

时间:2012-12-19 14:48:34

标签: sql-server asp-classic

修复由另一位开发人员编写的旧经典ASP网站中的错误,该网站已停止工作。以下SQL命令用于从数据库调用数据以创建表:

SELECT * 
FROM tblPropertyInfo 
INNER JOIN tblUsers on p_CustomerID = u_ID 
WHERE 
    p_Paid = 0 OR p_Enabled = 0 AND p_CustomerID <> 4 
ORDER BY " & orderby

问题是tblPropertyInfotblUsers都包含一列p_Type。在tblPropertyInfo中,p_Type存储它是什么类型的属性,这是我们想要在表中显示的值,但是我怀疑这被p_Type覆盖了tblUsers表大多是NULL值,因此返回表中的空单元格。

我不想开始使用表格结构,因为如果我在一个地方更改它,它会在整个网站上使用它会找到它的每一个引用并更新它们。

有没有办法可以指定从哪个表中提取列?

目前使用以下方式调用值:

<%=rsProperty("p_Type")%>

由于

3 个答案:

答案 0 :(得分:4)

尝试:

<%=rsProperty("tblUsers.p_Type")%>

如果这不起作用,您可以修改查询以仅返回一种类型(以及您可能需要的任何其他列):

SELECT  tblUsers.p_Type
,       ... other columns here ...
FROM tblPropertyInfo 
INNER JOIN tblUsers on p_CustomerID = u_ID 
WHERE 
    p_Paid = 0 OR p_Enabled = 0 AND p_CustomerID <> 4 
ORDER BY " & orderby

如果您想继续使用*,可以使用别名:

SELECT  tblUsers.p_Type as TheType
,       *

您可以参考:

<%=rsProperty("TheType")%>

答案 1 :(得分:3)

您可以限定您想要的值来自哪些表格:

SELECT tblPropertyInfo.* FROM tblPropertyInfo INNER JOIN tblUsers on p_CustomerID = u_ID WHERE p_Paid = 0 OR p_Enabled = 0 AND p_CustomerID <> 4

以上将从tblPropertyInfo中选择所有内容,但tblUsers中没有任何内容

或者列出您实际想要获取的属性(显然将实际列名称放入!)

SELECT tblPropertyInfo.Id, tblUsers.p_Type, tblPropertyInfo.SomethingElse FROM tblPropertyInfo INNER JOIN tblUsers on p_CustomerID = u_ID WHERE p_Paid = 0 OR p_Enabled = 0 AND p_CustomerID <> 4

答案 2 :(得分:2)

您可以为这些列设置别名 - 最好是因为潜在的错误被消除了。

SELECT *, tbl_Users.p_Type AS users_type, tbl_PropertyInfo.p_type AS property_type FROM ...

当然,您可以使用别名访问这些字段。