DISTINCTROW [たMyTable]削除し、その結果からMyTableというエントリを複製ありません。例:のにもかかわらず
select distinctrow items
items.item_number, items.name
from items
join orders on orders.item_id = items.id;
それは、DISTINCTROWは、アイテムごとに1つの行にこれを削減するために、複数のオーダーがある場合、あなたに同じITEM_NUMBERと名前を複数回取得参加。したがって、結合全体は、少なくとも1つの順序が存在するアイテムのみを選択することを保証するためのものです。他のDBMSで私が知る限り、DISTINCTROWを見つけることはできません。おそらくそれが必要ではないからでしょう。存在を確認するときは、もちろんEXISTS
を使用します(その点についてはIN
)。
MyTableとAnotherTableに参加していて、1つのAnotherTableレコードに対して同じMyTableレコードを複数回取得する必要があるため、DISTINCTROWを使用して1回だけ取得します。あなたのクエリが2つあれば(うまくいけば)失敗します異なった 1つのAnotherTableレコードのMyTableレコード。
update anothertable
set tesserecorso = (select top 1 j5f7nr from mytable where mytable.j5binb = anothertable.gkbinb and ...)
where exists (select * from mytable where mytable.j5binb = anothertable.gkbinb and ...)
しかし、これは二度同じサブクエリについて使用しています:
何の更新がないことです。ですから、代わりにクエリから更新したいと考えています。
標準のSQLクエリにいくつかの列に>を<ごとに1つの結果レコードを取得する最も簡単な方法は、データを集約することです:updatebleクエリを作成する方法
select *
from anothertable a
join
(
select j5binb, j5bhnb, j5bdcd, max(j5f7nr) as j5f7nr
from mytable
group by j5binb, j5bhnb, j5bdcd
) m on m.j5binb = a.gkbinb and m.j5bhnb = a.gkbhnb and m.j5bdcd = a.gkbdcd;
は別のDBMSは異なっています。 SQL Serverの最終更新文は次のとおりです。
update a
set a.tesserecorso = m.j5f7nr
from anothertable a
join
(
select j5binb, j5bhnb, j5bdcd, max(j5f7nr) as j5f7nr
from mytable
group by j5binb, j5bhnb, j5bdcd
) m on m.j5binb = a.gkbinb and m.j5bhnb = a.gkbhnb and m.j5bdcd = a.gkbdcd;
達成しようとしていることは何ですか?私は 'DISTINCTROW'に精通していませんが、' UPDATE'ではここには何の効果もありません。クエリは 'MyTable'の' 'J5F7NR''の最初の値で' AnotherTable'を更新するべきですか? 'DISTINCTROW'がない複数の行がある場合、それらはすべて同じですか - ' J5F7NR'は異なっていますか? –
私はこれを手助けするためにいくつかのデータが必要かもしれないと思います。 Accessで2つのクエリを実行し、データを投稿することができます: '[MyTable]内部結合[AnotherTable]から[MyTable]内部結合[AnotherTable] ... 'を選択し、[AnotherTable]。*を選択します。 .. ..両方から上の結合基準を使用していますか?少なくとも3つの結合キー値を確認する必要があります。 @StevenHibbleのように、私は 'Update'ステートメントの' distinct'または 'distinctrow'の使用と予想される結果に苦労します。 – SMM
サンプルデータを[SQL Fiddle](http:// sqlfiddle。com /)は、AccessでDISTINCTROWの有無に応じて異なる動作をしますが、おそらく簡単な回答が得られます。 – Andre