0

他のテーブルから値を検索するテーブルを選択して更新する必要があります。アイデアは、注文からいくつかの詳細を選択することですが、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

SELECT ステートメントの INNER JOIN を 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 フィールドで null を許可するか、b) 設計の問題を示す可能性のある fk 制約がない場合です。

@id の値が ORDER テーブルに存在する場合、update ステートメントはいくつかの行を更新する必要がありますが、 @Danny Varod が既にコメントしているように、影響を受ける行の数だけを取得することはできません。

于 2012-04-17T16:19:08.650 に答える
1

と比較stock.idしてOrder.product_idいますが、それが問題でしょうか?
それ以外の場合、テーブルの内容を知るために必要な行が返されないのはなぜleft joinですかinner join?

于 2012-04-17T16:08:37.287 に答える