2016-07-14 3 views
0

Ich versuche Data1 zu aktualisieren 's ID zu Record2' s ID wenn:SQLite - Aktualisieren einer Spalte basierend auf den Werten von zwei anderen Tabellen Spalten

  • Record1 und Record2Name sind die gleichen, und
  • Gewicht ist größer in Record2.

Record1

| 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 | 

Ich habe die folgende SQLite Abfrage versucht:

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) 

die obige Abfrage Data1 Mit ‚s id-4 für alle Datensätze aktualisiert wird.

HINWEIS: Record1 ‚s ID ist der Fremdschlüssel für Data1.

+0

@ CL. Diese Frage verwendet drei Tabellen und ich kann nicht die gleiche Abfrage verwenden, die Sie für diese Abfrage angegeben haben. – Prabha

+0

Wenn ich die Abfrage schreiben, wie vorgeschlagen, dann ist es nicht record1.name Update data1 gesetzt id = (wählen record2.id aus record2 wo record1.name = record2.name und record1.weight Prabha

Antwort

1

Für die gegebenen Datensatz die folgenden scheint die Ursache zu dienen:

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) 
; 

es Siehe in Aktion: SQL Fiddle.

Bitte kommentieren Sie, wenn und wie dies Anpassung/weitere Details erfordert.

+0

Vielen Dank! Es funktionierte genau so, wie es sein musste. @Abecee – Prabha

+0

@ Prabha: Bitte beachten Sie, dies würde/sollte/könnte nicht so funktionieren, wenn Ihre Bemerkung "Record1s ID ist der Fremdschlüssel für Data1." wurden auf der Schema-Ebene erzwungen. Dies scheint jedoch nicht als [dokumentiert] (https://www.sqlite.org/foreignkeys.html) zu funktionieren - siehe [SQL Fiddle] (http://sqlfiddle.com/#!5/c6926/1). – Abecee

Verwandte Themen