2012-01-01 68 views
1

我知道有些工具可以糾正這種情況,但不知怎的,我無法確定哪些錯誤(s)不允許檢索記錄,儘管需要2小時的嘗試和引用。內部連接,SQL,4個表

任何人都可以幫助我嗎?即時通訊使用VS 2008順便說一句。

SELECT pc.product_category_id, pc.product_category_name, 
     pi.product_image_id, pi.product_image_filename, 
     qr.qrcode_id, qr.qrcode_code, * 
FROM Product AS p 
INNER JOIN ProductCategory AS pc ON p.product_category_id = pc.product_category_id 
INNER JOIN ProductImage AS pi ON p.product_image_id = pi.product_image_id 
INNER JOIN QRCode AS qr ON p.qrcode_id = qr.qrcode_id 
WHERE p.product_id = '" & DropDownList2.Text & "'" 
+1

您是否收到錯誤或什麼? – 2012-01-01 16:09:33

+0

正如Darin所說,在你的問題中添加一些信息,實際上可以讓別人來幫助你。 – 2012-01-01 16:12:19

+0

我的猜測是你的錯誤是由不明確引用產生的,哪個表來自'*'。它應該由例如'第*'。如果您需要對錶格執行任何操作,使用'* *'的旁註可能會導致將來出現問題。明確引用您需要的列通常會更好。 – Ben 2012-01-01 16:12:20

回答

0

首先,手動檢查要獲得並加入記錄存在...

SELECT * FROM Product WHERE product_id = <insert a value here by hand> 

SELECT * FROM ProductCategory WHERE product_category_id = <value from the first SELECT> 

SELECT * FROM ProductImage WHERE product_image_id = <value from the first SELECT> 

SELECT * FROM QRCode WHERE qrcode_id = <value from the first SELECT> 

如果你記錄所有這些,比你可以確保您的連接正常工作。如果不是,你是否缺少記錄,或者需要使用LEFT JOIN?

所以,你的下一個檢查應該是你傳遞正確的價值,你的SQL查詢...

myCmd.CommandText = "SELECT '" & DropDownList2.Text & "'" 

你還看你需要周圍的ID '?這表示字符串,ID更多正常整數。

最後,查看參數化查詢,而不是手動建立字符串。

+0

謝謝你,實際上我測試了兩個p。*並列出所有列名。不知何故記錄不顯示,因爲表中沒有記錄,所以當我把它放在示例中時,它只是工作:) – brainsfrying 2012-01-01 17:29:25

0

由於內部連接,您的查詢將只返回具有類別,圖像和qrcode的產品。如果產品表中的這些列可以爲空,則必須使用LEFT OUTER JOIN(通常簡寫爲LEFT JOIN)。另外,你應該使用p.*,而不僅僅是*,因爲這會返回所有可用的列。返回像pc.product_category_id這樣的ID沒有意義,因爲相同的值已經從'p。*'返回。

SELECT 
    p.*, 
    pc.product_category_name, 
    pi.product_image_filename, 
    qr.qrcode_code 
FROM 
    Product AS p 
    LEFT JOIN ProductCategory AS pc 
     ON p.product_category_id = pc.product_category_id 
    LEFT JOIN ProductImage AS pi 
     ON p.product_image_id = pi.product_image_id 
    LEFT JOIN QRCode AS qr 
     ON p.qrcode_id = qr.qrcode_id 
WHERE 
    p.product_id = 'xxx'