2016-07-12 14 views
0

私は二つのテーブルがあります。MySQLの条件付きのテーブル更新不明な列エラー1054

  • Table_Aを=店舗
  • Table_B =集約関数のために使用する

Table_ATable_BシェアIDと呼ばれる2つの列を結果CYCLEでも、Table_Bには、複数の出現が含まれています(CYCLE)。 CYCLEの出現回数をTable_Bに数えて、Table_Aに格納したいと思います。たとえば、CYCLE = 42の場合、同じ値を持つ行が20行あり、CYCLEの値はになりますが、CYCLEは同じ値(42)ですが、COUNTの列は私は私のクエリのError Code: 1241. Operand should contain 1 column(s)

任意の提案を得続ける

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 

:ここでは20が含まれていますそのCYCLEためTable_Aは、私がこれまで持っているものでしょうか?

EDIT 1

SELECT文は、2つの列を返します。それがError Code: 1241を引き起こしているのですが、それが解決されたので、私はError Code: 1054. Unknown column 'database.Table_2.CYCLE' in 'where clause'となります。

+0

[MySQLエラー "オペランドには1列が含まれているはずです]"(http://stackoverflow.com/questions/9707664/mysql-error-operand-should-contain-1-column) – Drew

+0

@Drewありがとうポイントそれはアウト。私は問題がSELECT文でどこにあったのか理解し、それを反映するために私の質問を編集しました。今では '不明な列... 'に直面しています - エラー1054。 – vFlav

+0

別のテーブルのデータを使用して1つのテーブルを更新することはできません。同じものにJOINを使用する必要があります。 'database.Table_2.CYCLE = database.Table_2.CYCLE'とは何ですか?あなたは 'database.Table_1.CYCLE = database.Table_2.CYCLE'を意味しましたか?私はあなたがmysqlの問題を意味していると仮定しています –

答えて

1

これは、古いカットで、私が参加して、更新および集計のために持って貼り付けます。別のテーブルに対しての集計に基づいて

更新

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

だけのMyID = 15をタッチします。

私の仲間を悩ますなら、それを喜んで削除します。実際には、私はすべての票を使い切ったので、今日は削除できません。

+0

質問に関連する質問を回答に追加して、受け入れるようにしてください:) –

+0

OKです。もし私が彼のスキーマをいくらか明確にすれば。 – Drew

関連する問題