0

次のように2つのテーブルがあります。

囲い

+-------+--------------+-----------+-----------+
| name  | serialnumber | VCenabled | BCenabled |
+-------+--------------+-----------+-----------+
| ENC01 | 12345        |           |           |
| ENC02 | 45678        |           |           |
| ENC03 | 11222        |           |           |
+-------+--------------+-----------+-----------+

インターコネクト

+-------------+-----------+-----------------------+
| description | baynumber | enclosureserialnumber |
+-------------+-----------+-----------------------+
| VC          | 1         | 12345                 |
| VC          | 2         | 12345                 |
| BC          | 3         | 12345                 |
| VC          | 1         | 45678                 |
| BC          | 3         | 45678                 |
+-------------+-----------+-----------------------+

VCenabledテーブルの列とBCenabled列を更新する必要がありEnclosureます。VCenabledテーブル内の対応する行の数が含まれている必要がありInterconnectます。についても同様ですBCenabled

これが私が終わらせる必要があるものです:

+-------+--------------+-----------+-----------+
| name  | serialnumber | VCenabled | BCenabled |
+-------+--------------+-----------+-----------+
| ENC01 | 12345        | 2         | 1         |
| ENC02 | 45678        | 1         | 1         |
| ENC03 | 11222        |           |           |
+-------+--------------+-----------+-----------+

この SQL クエリを思いつくことができましたが、これを更新するのはあまりうまくいきません。また、このクエリは、Flyspeed Query で実行すると機能しますが、MySQL Workbench で実行すると、1064 エラー: SQL 構文のエラーが発生します。

Select
  enclosure.name,
  enclosure.vcenabled,
  count(*)
From
  enclosure Inner Join
  interconnect On interconnect.enclosureserialnumber = enclosure.serialnumber
Where
  interconnect.description like '%VC%'
Group By
  enclosure.serialnumber

どんな助けでも大歓迎です。

4

4 に答える 4

0
update Enclosure as E1 set E1.VCenabled = (select count(*) from Interconnect as I where I.enclosureserialnumber = E1.serialnumber and I.description = 'VC');

BCも同様

テスト済み...エラーが発生した場合は、スペルミスがないか確認してください。

私のシステムへの出力用....

http://pastebin.com/B0bUDYX6

于 2013-10-30T02:08:24.453 に答える
0

サンプル

UPDATE 
  Enclosure e
  INNER JOIN (
    SELECT
      enclosureserialnumber,
      SUM(CASE WHEN description = 'VC' THEN 1 ELSE 0 END) AS VC,
      SUM(CASE WHEN description = 'BC' THEN 1 ELSE 0 END) AS BC
    FROM
      Interconnect 
    GROUP BY
      enclosureserialnumber
  ) q1
    ON e.serialnumber = q1.enclosureserialnumber
SET
  VCenabled = q1.VC,
  BCenabled = q1.BC;
于 2013-10-30T01:37:55.110 に答える
0

これは、更新でサブクエリを使用して機能するはずです。

update Enclosure e
join (
  select enclosureserialnumber,
    sum(case when i.description = 'VC' then 1 else 0 end) vcsum,
    sum(case when i.description = 'BC' then 1 else 0 end) bcsum
  from Interconnect i
  group by i.enclosureserialnumber
  ) i
  on e.serialnumber = i.enclosureserialnumber
set e.VCenabled = i.vcsum,
   e.BCenabled = i.bcsum;
于 2013-10-30T01:39:03.350 に答える