2012-04-17 91 views
0

我需要選擇並更新查找其他表中的值的表。我們的想法是選擇順序的一些細節,但使用id構建複雜的sql語句

對於選擇我試圖讓外鍵值名稱:

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

你的意思是沒有被更新或你不會得到任何結果 - 因爲update語句不會像select語句那樣給出多個結果(只有更新的行數)。 – 2012-04-17 16:12:05

回答

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你不會得到行只退行的數量的影響

+0

ID感謝,這工作。你可以幫助更新處理,我想我錯了 – Smith 2012-04-17 17:25:41

+0

你能描述你的意思嗎?例如您將爲vehicle.id獲得'0個記錄(更新)'或空值 – 2012-04-17 17:50:36

1

您比較stock.idOrder.product_id,會是什麼問題?
否則爲什麼它沒有返回任何行,我們需要知道表的內容,也許你需要一個left join而不是inner join其中的一些?

+0

沒有它沒有問題的product_id是在股票表 – Smith 2012-04-17 16:14:12