2016-07-14 2 views
0

私はのData1更新しようとしているのIDにRECORD2IDのSQLite - 2他のテーブルからの値に基づいて列を更新する列

  • レコード1をとレコード2名前はと同じであり、
  • 重量Record2で大きくなります。

レコード1

| ID | Weight | Name | 
|----|--------|------| 
| 1 |  10 | a | 
| 2 |  10 | b | 
| 3 |  10 | c | 

RECORD2

| ID | Weight | Name | 
|----|--------|------| 
| 4 |  20 | a | 
| 5 |  20 | b | 
| 6 |  20 | c | 

のData1

| ID | Weight | 
|----|--------| 
| 4 |  40 | 
| 5 |  40 | 

私は、次のSQLiteのクエリを試してみました:

update data1 
set id = 
    (select record2.id 
    from record2,record1 
    where record1.name=record2.name 
    and record1.weight<record2.weight) 
where id in 
    (select record1.id 
    from record1, record2 
    where record1.name=record2.name 
    and record1.weight<record2.weight) 

のData1さんIDは、すべてのレコードに対して4に更新されて上記のクエリを使用しました。

注:レコード1さんIDのData1の外部キーです。与えられたデータについては

+0

@ CL。この質問は3つのテーブルを使用しており、私はあなたのためにあなたに提供されたものと同じクエリを使用することができません。それはrecord1.name 更新DATA1 設定ID = を認識しません示唆したように、私は、クエリを記述する場合 – Prabha

+0

(RECORD2 record1.name = record2.name とrecord1.weight Prabha

答えて

1

は、次のように設定し、原因を提供しているようだ:

update data1 
set id = 
    (select record2.id 
    from record2,record1 
    where 
    data1.id = record1.id 
    and record1.name=record2.name 
    and record1.weight<record2.weight) 
where id in 
    (select record1.id 
    from record1, record2 
    where 
    record1.id in (select id from data1) 
    and record1.name=record2.name 
    and record1.weight<record2.weight) 
; 

は、アクションでそれを参照してください:SQL Fiddle

調整が必要な場合は、コメントしてください。

+0

ありがとうございます!それは正確にそれがしなければならない方法で働いた。 @Abecee – Prabha

+0

@Prabha:あなたの発言「Record1のIDがData1の外部キーである」場合、これは/そうでなければならない/この方法では機能しないことに注意してください。スキーマレベルで実施されました。しかし、これは[文書化された](https://www.sqlite.org/foreignkeys.html)としては動作しないようです - [SQL Fiddle](http://sqlfiddle.com/#!5/c6926/1)。 – Abecee

関連する問題