我需要选择并更新从其他表中查找值的表。我们的想法是从订单中选择一些细节,但使用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)
两者都不会返回任何内容。我希望能够得到一些帮助,但如果没有,我会提供更多信息。
感谢您的帮助
答案 0 :(得分:1)
您正在将stock.id
与Order.product_id
进行比较,这可能是问题吗?
否则,为什么它不返回任何行我们需要知道表的内容,也许你需要left join
而不是inner join
?
答案 1 :(得分:1)
您可能想尝试将INNER JOIN转换为SELECT语句的LEFT JOIN。
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的值存在于ORDER表中,则更新语句应更新某些行,但如果@Danny Varod already commented,则不会只返回受影响行数的行