2016-07-12 12 views
0

Ich habe zwei Tabellen:MySQL bedingte Tabellenaktualisierung Unbekannte Spalte Fehler 1054

  • Table_A = speichert die Ergebnisse
  • Table_B = für Aggregatfunktion verwenden

Table_A und Table_B Aktien zwei Spalten genannt ID und CYCLE, aber Table_B enthält mehrere Vorkommen von CYCLE. Ich möchte die Anzahl der Vorkommen von CYCLE in Table_B zählen und sie in Table_A speichern. Wenn zum Beispiel für CYCLE = 42 wir 20 Zeilen haben, die den gleichen Wert haben, möchte ich das zählen (dh 20) und es in Table_A unter CYCLE speichern, da CYCLE den gleichen Wert (42) aber die COUNT Spalte in haben wird Table_A für diese CYCLE wird 20. Hier enthalten ist, was ich habe, so weit:

UPDATE database.Table_A 
SET count = 
(
SELECT ID, CYCLE, 
COUNT(*) FROM database.Table_2 
GROUP BY ID, CYCLE 
) 
WHERE database.Table_1.ID = database.Table_2.ID AND 
     database.Table_1.CYCLE = database.Table_2.CYCLE 

ich halte Error Code: 1241. Operand should contain 1 column(s)

Irgendwelche Vorschläge für meine Frage zu bekommen?

EDIT 1

Die SELECT Anweisung gibt zwei Spalten. Das ist, was Error Code: 1241 verursacht, aber jetzt, dass das gelöst ist, bekomme ich Error Code: 1054. Unknown column 'database.Table_2.CYCLE' in 'where clause'.

+0

Mögliches Duplikat von [MySQL Fehler "Operand sollte 1 Spalte enthalten]] (http://stackoverflow.com/questions/9707664/mysql-error-operand-should-contain-1-column) – Drew

+0

@Drew danke für das Zeigen das heraus. Ich verstehe, wo das Problem mit der SELECT-Anweisung war und habe meine Frage bearbeitet, um das zu reflektieren. Jetzt bin ich konfrontiert mit "Unbekannte Spalte ..." - Fehler 1054. – vFlav

+0

Sie können nicht aktualisieren Sie eine Tabelle mit Daten aus einer anderen Tabelle, müssen Sie JOIN für die gleiche verwenden. Was ist 'database.Table_2.CYCLE = database.Table_2.CYCLE'? Meintest du "database.Table_1.CYCLE = database.Table_2.CYCLE"? Ich nehme an, Sie meinten das Problem für mysql –

Antwort

1

Dies ist eine alte Ausschneiden und Einfügen Ich habe für ein Update mit einem Join und einem Aggregat:

Update basierend auf Aggregat gegen einen anderen Tisch

create table tA 
( id int auto_increment primary key, 
    theDate datetime not null, 
    -- other stuff 
    key(theDate) -- make it snappy fast 
); 

create table tB 
( myId int primary key, -- but definition PK is not null 
    someCol int not null 
); 

-- truncate table tA; 
-- truncate table tB; 

insert tA(theDate) values 
('2015-09-19'), 
('2015-09-19 00:24:21'), 
('2015-09-19 07:24:21'), 
('2015-09-20 00:00:00'); 

insert tB(myId,someCol) values (15,-1); -- (-1) just for the heck of it 
insert tB(myId,someCol) values (16,-1); -- (-1) just for the heck of it 

update tB 
set someCol=(select count(*) from tA where theDate between '2015-09-19 00:00:00' and '2015-09-19 00:59:59') 
where tB.myId=15; 

select * from tB; 
+------+---------+ 
| myId | someCol | 
+------+---------+ 
| 15 |  2 | 
| 16 |  -1 | 
+------+---------+ 

nur myid = 15 berührt wird.

Ich werde es gerne löschen, wenn es meine Kollegen stört. Tatsächlich kann ich es heute nicht löschen, da ich alle meine Stimmen aufgebraucht habe.

+0

Bitte fügen Sie die Abfrage in Bezug auf die Frage in Ihrer Antwort, so dass er es akzeptieren kann :) –

+0

Ok wird in ein paar Minuten tun. Wenn ich Klarheit über sein Schema habe. – Drew

Verwandte Themen