构造复杂sql语句

构造复杂sql语句,sql,sql-server-2005,Sql,Sql Server 2005,我需要选择并更新一个表,从其他表中查找值。其思想是从order中选择一些细节,但使用id获取外键值的名称 对于我尝试的选择: SELECT [Order].order_date, [Order].total_price, [Order].order_details, vehicle.reg_no, Staff.name, stock.name FROM Order, vehicle,

我需要选择并更新一个表,从其他表中查找值。其思想是从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)
两者都不返回任何内容。我希望我足够清楚,可以得到一些帮助,但如果没有,请我会提供更多的信息


感谢您的帮助

您正在将
stock.id
Order.product\u id
进行比较,这可能是问题所在吗?

否则,为什么它不返回任何行呢?我们需要知道表的内容,也许您需要一个
左联接
,而不是
内部联接

您可能需要尝试将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约束


如果订单表中存在@id的值,则update语句应该更新某些行,但由于您不会返回受影响的行数,因此仅返回受影响的行数

您的意思是什么也没有更新,还是没有结果-因为update语句不像select语句那样提供多个结果(仅更新行数)不,这不是问题。产品id是库存表中的id。谢谢,这起作用了。你能帮我更新一下吗?我想我弄错了。你能描述一下你所说的错误是什么意思吗。e、 g.您得到更新的
0条记录
或vehicle.id的空值