SELECT * FROM Products_Joined, Products
WHERE p.ProductManufacturer = 'Sony'
ORDER BY p.ProductCode
我不斷收到錯誤多部分標識符p.ProductManufacturer無法綁定多部分標識符無法綁定
我想:
- 設置
Order By
- 將
PRODUCTS
表添加到FROM
有什麼我失蹤了嗎?
SELECT * FROM Products_Joined, Products
WHERE p.ProductManufacturer = 'Sony'
ORDER BY p.ProductCode
我不斷收到錯誤多部分標識符p.ProductManufacturer無法綁定多部分標識符無法綁定
我想:
Order By
PRODUCTS
表添加到FROM
有什麼我失蹤了嗎?
您沒有p對象。你需要別名你的一個表。
SELECT * FROM Products_Joined, Products AS p
WHERE p.ProductManufacturer = 'Sony'
ORDER BY p.ProductCode
這將能夠立即解決的問題,但是你應該有你的表,否則你正在做一個CROSS JOIN
,這通常是不理想的一個JOIN
。下面是一個例子。如果你即使有Products.ProductManufacturer收到錯誤,那麼你可能缺少Products表中的列ProductManufacturer
SELECT *
FROM Products_Joined
JOIN Products AS p
ON Products_Joined.ProductsID = p.ProductsID
--This join is a guess on what the common column is between these two tables
--Change as necessary
WHERE p.ProductManufacturer = 'Sony'
ORDER BY p.ProductCode
UPDATE基於您的評論
。我會檢查你的模式並確認列存在。
交叉連接檢測到lol – 2012-03-19 14:28:52
@DenisValeev當然,我注意到了。我不打算爲他重寫查詢,因爲我不知道要加入什麼,所以只需將它留給代碼即可。我已經使用猜測更新了示例 – 2012-03-19 14:36:03
你應該使用:
SELECT p.*, pj.*
FROM dbo.Products p
INNER JOIN dbo.ProductsJoined pj ON ..... <== add your missing JOIN condition here
WHERE p.ProductManufacturer = 'Sony'
ORDER BY p.ProductCode
首先:從來沒有在您的生產代碼中使用SELECT *
。
其次:使用正確的ANSI JOIN語法(INNER JOIN..
)清楚地表明要加入什麼,和什麼JOIN條件(其中缺少你的情況 - 你在這裏產生一個笛卡爾乘積。 ....)
第三:如果您使用像p.
這樣的表別名 - 您還需要定義它們!
「在您的生產代碼中從不使用SELECT *」 - 「對於任何人告訴您永遠不要在SQL中執行任何操作時,請始終保持警惕。[在以下示例中](http:// stackoverflow .com/a/9328000/15354),SELECT *不會造成任何傷害,並且在可讀性和代碼維護方面可以說是有益的。「 – onedaywhen 2012-03-21 11:05:01
@onedaywhen:那些是非常罕見的邊緣案例 - 即使如此 - 在使用SELECT *時也沒有**好處 - 您也可以鍵入問題的列 - 我總是建議做 – 2012-03-21 12:31:42
示例是簡化但通用形式。好處是您不必再次輸入它們(DRY),這樣可以減少錯誤的發生,特別是在以後添加列時。但強迫用戶總是輸入逗號列表非常嚴格。說到嚴格:笛卡爾積的結果是一組有序對,而不是關係/表。 OP的語法不僅是ANSI SQL,也是ISO SQL。文獻使用術語「範圍變量」來表示SQL標準爲所謂的「別名」所稱的「相關名稱」;) – onedaywhen 2012-03-21 13:16:59
該查詢中定義了哪個「p」? (提示:不是)你也錯過了一個連接條件。 – 2012-03-19 14:26:29
你能說清楚你試圖用這個查詢來完成什麼嗎?例如,所需的輸出結果。 – ImGreg 2012-03-19 14:28:06
當我用Products.ProductManufacturer – henryaaron 2012-03-19 14:28:08