0

我需要选择并更新一个从其他表中查找值的表。这个想法是从 order 中选择一些细节,但使用 id 获取外键值的名称

对于我尝试的选择:

SELECT [Order].order_date, 
       [Order].total_price, 
       [Order].order_details,
       vehicle.reg_no,
       Staff.name,
       stock.name 
FROM 
       Order,
       vehicle,
       staff,
       stock
WHERE
      order.id = @order_id 
  AND vehicle.id = Order.vehicle_id 
  AND staff.id = Order.staff_id 
  AND stock.id = Order.product_id

对于我尝试的更新

UPDATE order 
SET 
    total_price = @total_price, 
    order_detail = @order_detail,
    product_id = (select is from stock where name = @product_name), 
    customer_id = (select id  from customer where name = @customer_name), 
    vehicle_regno = (select reg_no  from vehicle where name = @name)
WHERE (id = @id)

两者都不返回任何东西。我希望足够清楚以获得一些帮助,但如果不是,我会提供更多信息。

谢谢你的帮助

4

2 回答 2

1

您正在与 进行比较stock.idOrder.product_id这可能是问题吗?
否则为什么它不返回任何我们需要知道表格内容的行,也许你需要 aleft join而不是其中的inner join一些?

于 2012-04-17T16:08:37.287 回答
1

您可能想尝试将您的 INNER JOIN 转换为 LEFT JOIN 用于 SELECT 语句。

SELECT [Order].order_date, 
       [Order].total_price, 
       [Order].order_details,
       vehicle.reg_no,
       Staff.name,
       stock.name 
FROM 
       [Order] 
       LEFT JOIN vehicle
       ON vehicle.id = [Order].vehicle_id 
       LEFT JOIN staff
       ON staff.id = [Order].staff_id
       LEFT JOIN stock
       ON stock.id = [Order].product_id
WHERE
      [order].id = @order_id 

这会产生影响的原因是,如果 a) 您在 fk 字段中允许空值,或者 b) 您没有 fk 约束,这可能表明您的设计存在问题。

如果 ORDER 表中存在@id 的值,您的更新语句应该更新一些行,但正如 @Danny Varod 已经评论的那样,您不会只取回受影响的行数

于 2012-04-17T16:19:08.650 回答