2012-12-19 52 views
1

正在修復其他開發人員編寫的舊版經典ASP站點中的錯誤,此錯誤已停止工作。下面的SQL命令用於從數據庫中調用數據創建一個表:SQL Server內部連接衝突列

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。在tblPropertyInfop_Type商店什麼類型的財產是,這是我們希望在表中顯示的數值,但是我懷疑這是由p_TypetblUsers表其中大部分是NULL值,所以返回空單元格的表格覆蓋。

我不想開始玩桌子結構,因爲如果我在一個地方改變它,它們會在整個網站上使用,會找到每一個引用並更新它們。

有沒有一種方法可以指定從哪個表中拉列?

值是使用現名:

<%=rsProperty("p_Type")%> 

感謝

+0

你需要**明確指定**你想要的東西列,從表。這樣做無論如何都是最佳實踐 - 不要在生產代碼中使用SELECT *! (見[不良習慣踢 - 使用SELECT *)(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/bad-habits-to-kick-using-select-omitting-the-列list.aspx)當你這樣做,你可以定義'p_Type'列之一的** **別名(新名稱) –

+0

選擇在這種情況下,*本質上是效率較低,因爲它是在returing duplcate數據連接字段。此外,請認真使用()然後使用OR。現在你不能分辨是什麼意思是(p_Paid = 0或p_Enabled = 0)和p_CustomerID <> 4 或p_Paid = 0或(p_Enabled = 0和p_CustomerID <> 4) 所以你不知道如果該查詢是否正確或者是否存在錯誤。 – HLGEM

回答

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")%> 
+0

也'select tblUsers.p_Type,*'....因爲他可能不知道其他列正在引用 – EJC

+0

@EJC:好主意。這樣寫* *會帶來衝突,但別名會修復它。 – Andomar

+0

謝謝你們,使用別名做竅門 – HuwD

3

,則可以限定其tabels你想來自值:

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

你可以爲這些列設置別名 - 這是更好的東陽潛在的失誤被淘汰。

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

當然,你可以使用別名訪問這些字段。