2012-01-01 71 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'