构造复杂sql语句
我需要选择并更新一个表,从其他表中查找值。其思想是从order中选择一些细节,但使用id获取外键值的名称 对于我尝试的选择:构造复杂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,
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的空值