0

Workers と Stats という名前の 2 つのテーブルがあります。

Workers テーブルには、次のような構造の 1 つの列に (ばかげて) 入れられた大きな姓と名のリストがあります。

NameID,   Name
  1,      John
  2,      Smith
  3,      McDonald
  4,      Harry

Stats テーブルには、ワーカーのすべての統計が次のように表示されます。

id, firstnameid, secondnameid,  wage,    sold
 1,    4,           3,          1000,    10
 2,    1,           2,          2000,    20

これは非常に不便なので、Stats テーブルの nameids を実際の名前に変更するクエリまたは何かを作成しようとしています。

UPDATE `Stats` SET `Stats.firstnameid` =  `Workers.Names` 
WHERE `Stats.firstnameid` = `Workers.NameID`

次に、secondnameid についても同じことを行います。

したがって、これが機能した場合の結果は、Stats テーブルが次のように変更されることになります (上記の例のテーブルを使用)。

 id,  firstnameid, secondnameid,       wage,    sold
 1,    Harry,      McDonald,          1000,     10
 2,    John,       Smith,             2000,    20

誰か助けてくれませんか?

ありがとう。

4

2 に答える 2

1

まず、テーブル構造を変更する必要があります。データの移動に関しては、以下のようなものです。

UPDATE
    Stats
SET
    s.firstName = w1.name,
    s.secondName= w2.name
FROM Stats AS s
INNER JOIN Workers AS w1 ON s.firstnameid = w1.NameID
INNER JOIN Workers AS w2 ON s.secondnameid= w2.NameID

私はワーカー テーブルのアイデアが好きですが、あなたのワーカー テーブルは実際には名前テーブルであり、非常に奇妙です。名、姓、住所などの列を持つworkersテーブルが必要です。

于 2013-03-30T12:56:22.143 に答える
1

それをしないでください!

代わりにビューを作成します。

create view v_stats as
    select s.id, fname.name as firstname, lname.name as lastname, s.wage, s.sold
    from stats s left outer join
         workers fname
         on s.firstnameid = fname.nameid left outer join
         workers lname
         on s.lastnameid = lname.nameid;

なぜ誰かがそのように名前を分割してデータベースを設計するのか、私にはわかりません。わかりました、それは悪いデータベース設計か何かのようです。名前をコピーして問題を複雑にすることで、問題を改善することはできません。おそらく、そのテーブルは何らかの形で維持されています。

2 人の従業員の名前が同じ場合、workers テーブルには 1 行または 2 行ありますか?

于 2013-03-30T12:50:15.520 に答える