1

ここに 2 つのテーブルがあります。両方のテーブルからの情報に基づいて最初のテーブルを更新 (選択ではなく) したい。

という名前の最初のテーブルsomecities:

Name - State - Country - Info1 - Info2
Orlando - FL - US - 123 -AAA
Hrodna - HV - BY - 890 -BBB

という名前の 2 番目のテーブルallcities:

Name - State - Country - Info1
Orlando - FL - US - 123
Orlando - KY - US - 456
Orlando - WV - US - 789
Orlando - SW - SA - 333
Hrodna - HV - BY - 890
Minsk - MV - BY - 199

テーブルの (名前、州、国) のペアは、重要な場合somecities はテーブルにあります。allcitiesということで、allcitiesテーブルが大きくなりました。

このように変更したいsomecities

1) 最初の行を取り、 を取りOrlandoます。で4回遭遇allcities。したがって、Orlando の文字列を 1 つではなく 4 つ作成します (いくつかの都市に 3 行を追加します)。

2) 次の都市 (2 番目と最後の都市) に移動しHrodnaます。Hrodnaはすべての都市で 1 回しか満たされないため、 には行を追加しません (ゼロ行を追加します) somecities

3) の各行に対して実行しsomecitiesます。

クエリの結果は更新されsomecitiesます:

Name - State - Country - Info1 - Info2
Orlando - FL -  US     - 123   -  AAA
Orlando - KY -  US     - 456   -  AAA
Orlando - WV -  US     - 789   -  AAA
Orlando - SW -  SA     - 333   -  AAA
Hrodna  - HV -  BY     - 890   -  BBB

PS ご覧のとおり、Info2 の値は同じ都市の Info2 から取得されます。

1回のクエリで実行できますか? 回答として 2 つのクエリも受け付けます。

私はそれを明確に説明しましたか?

ありがとうございました。

4

2 に答える 2

2

INSERT クエリが必要です。次のようなものを使用できます。

INSERT INTO somecities
SELECT a.*, si.Info2
FROM
  allcities a LEFT JOIN somecities s
  ON a.Name=s.Name AND a.State=s.State AND a.Country=s.Country
  INNER JOIN (SELECT DISTINCT Name, Info2
              FROM somecities) si
  ON a.Name=si.Name
WHERE
  s.Name IS NULL

ここでフィドルを参照してください。

これは、WHERE s.Name IS NULL で LEFT JOIN を使用しているため、一部の都市に存在しない (または同じ名前で州や国が異なる) すべての都市からすべての行を挿入します。

次に、一部の都市に存在する都市の名前と Info2 列を選択し、一部の都市に少なくとも 1 回存在する行のみを返すために、名前だけで INNER JOIN を実行しています。

于 2013-10-30T22:55:25.333 に答える