0

シナリオ 1 existingTable というテーブルに追加したい 2 つの新しいフィールドがあります。これらのフィールドを追加した後、それらのフィールドのデータで一部のレコードを更新できますが、すべてのレコードを更新することはできません。空白のエントリがありますが、これで問題ありません。

問題 1 正しいレコードが更新されていることを確認したい。既存のテーブルと受信データ テーブルの主キーは Email です。

提案された解決策 1 このような UPDATE クエリが解決策です。

UPDATE existingTable SET existingTable.newField1 = incomingDataTable.newField1、existingTable.newField2 = incomingDataTable.newField2 WHERE existingTable.Email = incomingDataTable.Email

どう思いますか?


シナリオ 2 テーブルが適切なレコードの新しいフィールドとデータで更新された後、このテーブルを他の 2 つのテーブルと結合したいと考えています。一部のフィールドが空白であっても、すべてのエントリをこの結合に含める必要があります。どのレコードも除外したくありません。

ちなみに、これらのテーブルの各レコードは、他のテーブルのパートナーと 1 対 1 の関係を持っています。重複レコードがあってはなりません。過去に、Access が INNER JOIN を使用しているのを見てきました。これは、newField1 と newField2 の値を持たないレコードを除外します。これは私が望むものではありません。

問題 テーブルの結合に不慣れです。さまざまな結合は、私にとって少し混乱します。

提案された解決策 結合される 3 つのテーブルは 1 対 1 の関係を持つ必要があるため、使用する結合は必ずしも重要ですか?

SELECT * FROM existingTable FULL JOIN tableToJoinWith1、tableToJoinWith2 オン existingTable.Email = tableToJoinWith1.Email、tableToJoinWith1.Email = tableToJoiNWith2.Email

4

1 に答える 1

0

シナリオ 2 の明確化。他のテーブルのいずれかとフィールドにexistingTable一致がない場合でも、すべての行が必要であると想定しています。Emailこの場合、 aLEFT JOINはあなたが望むものです:

SELECT * FROM existingTable
LEFT JOIN tableToJoinWith1 ON existingTable.email = tableToJoinWith1.email 
LEFT JOIN tableToJoinWith2 ON existingTable.email = tableToJoinWith2.email 

シナリオ 1 の場合、問題は SELECT をまったく指定していないことですincomingDataTable。標準 SQL では、私の知る限り、複数の列をサポートする良い方法はありません。したがって、使用しているデータベースによって異なります。いくつかはあなたにこれをさせます:

UPDATE existingTable
SET newField1 = incomingDataTable.newField1, newField2 = incomingDataTable.newField2 
FROM incomingDataTable
WHERE existingTable.Email = incomingDataTable.Email

しかし、そうしない人もいます。他の人はこれを許可します:

UPDATE (Select * FROM existingTable JOIN incomingDataTable
ON existingTable.Email = incomingDataTable.Email)
SET existingTable.newField1 = incomingDataTable.newField1,
existingTable.newField2 = incomingDataTable.newField2

単一の列のみの場合は、これを行うことができます。これは完全に標準です。

UPDATE existingTable SET newField1 = (SELECT newField1 FROM incomingDataTable 
WHERE existingTable.Email = incomingDataTable.Email)
于 2012-10-17T04:28:13.637 に答える