2016-04-07 17 views
1

私は子の外部キーとしてシフトを持ち、それらのシフトはテーブルに説明を持っている、実行と呼ばれる親テーブルを持っています。私は、クエリ内の子シフトの説明を選択し、別のシフトと比較するためにそのシフトの説明にアクセスする必要があります。こここれはMYSQLで行うことができます

は、テーブルの説明です: 実行

+----------------------+--------------+------+-----+-------------------+-----------------------------+ 
| Field    | Type   | Null | Key | Default   | Extra      | 
+----------------------+--------------+------+-----+-------------------+-----------------------------+ 
| RunId    | int(11)  | NO | PRI | NULL    | auto_increment    | 
| RunType    | varchar(1) | YES |  | NULL    |        | 
| Plant    | varchar(2) | NO | MUL | NULL    |        | 
| Warehouse   | varchar(20) | YES |  | NULL    |        | 
| LegacyId    | int(11)  | YES |  | NULL    |        | 
| RunDate    | date   | NO |  | NULL    |        | 
| Shift    | varchar(20) | NO |  | NULL    |        | 
| NumEmployees   | int(11)  | YES |  | NULL    |        | 
| DryersRan   | tinyint(1) | YES |  | NULL    |        | 
| HogfuelDelivered  | int(11)  | YES |  | NULL    |        | 
| ScheduledStart  | datetime  | YES |  | NULL    |        | 
| ScheduledEnd   | datetime  | YES |  | NULL    |        | 
| ScheduledHours  | decimal(4,2) | YES |  | NULL    |        | 
| Downtime    | int(11)  | YES |  | NULL    |        | 
| ProductLength  | varchar(10) | YES |  | NULL    |        | 
| ProductWidth   | varchar(10) | YES |  | NULL    |        | 
| ProductThickness  | varchar(10) | YES |  | NULL    |        | 
| Species    | varchar(10) | YES | MUL | NULL    |        | 
| NumBlocks   | int(11)  | YES |  | NULL    |        | 
| TestRun    | tinyint(1) | YES |  | NULL    |        | 
| AveDiameter   | decimal(5,2) | YES |  | NULL    |        | 
| BlockScale   | int(11)  | YES |  | NULL    |        | 
| LogScale    | int(11)  | YES |  | NULL    |        | 
| NumSpinouts   | int(11)  | YES |  | NULL    |        | 
| Pieces    | int(11)  | YES |  | NULL    |        | 
| Footage    | int(11)  | YES |  | NULL    |        | 
| Surface    | int(11)  | YES |  | NULL    |        | 
| Coreline    | int(11)  | YES |  | NULL    |        | 
| Dryer1    | int(11)  | YES |  | NULL    |        | 
| Dryer2    | int(11)  | YES |  | NULL    |        | 
| Dryer3    | int(11)  | YES |  | NULL    |        | 
| Sander    | int(11)  | YES |  | NULL    |        | 
| Redry    | int(11)  | YES |  | NULL    |        | 
| GradeStamped   | tinyint(1) | YES |  | NULL    |        | 
| Status    | varchar(10) | YES |  | NULL    |        | 
| Notes    | text   | YES |  | NULL    |        | 
| InventoryTransaction | int(11)  | YES |  | NULL    |        | 
| LastEdited   | timestamp | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| LastEditedBy   | varchar(20) | YES |  | NULL    |        | 
| LegacyRun   | int(11)  | YES |  | NULL    |        | 
| WorkCenter   | varchar(20) | YES | MUL | NULL    |        | 
+----------------------+--------------+------+-----+-------------------+-----------------------------+ 

RunItem:

+--------------+-------------+------+-----+-------------------+-----------------------------+ 
| Field  | Type  | Null | Key | Default   | Extra      | 
+--------------+-------------+------+-----+-------------------+-----------------------------+ 
| ItemId  | int(11)  | NO | PRI | NULL    | auto_increment    | 
| ItemType  | varchar(2) | NO |  | NULL    |        | 
| Run   | int(11)  | YES | MUL | NULL    |        | 
| LegacyRun | int(11)  | YES |  | NULL    |        | 
| WorkCenter | varchar(20) | YES |  | NULL    |        | 
| Product  | int(11)  | YES | MUL | NULL    |        | 
| DayProduced | date  | YES |  | NULL    |        | 
| Source  | varchar(20) | YES |  | NULL    |        | 
| SourceShift | varchar(20) | YES |  | NULL    |        | 
| PieceCount | int(11)  | YES |  | NULL    |        | 
| Surface  | int(11)  | YES |  | NULL    |        | 
| Coreline  | int(11)  | YES |  | NULL    |        | 
| Footage  | int(11)  | YES |  | NULL    |        | 
| LastEdited | timestamp | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| LastEditedBy | varchar(20) | YES |  | NULL    |        | 
| Bundle  | int(11)  | YES | MUL | NULL    |        | 
+--------------+-------------+------+-----+-------------------+-----------------------------+ 

(i.Shift ISSこれは私がこれまで試したクエリであり、それは文句を言わない私にやらせます)これはどうすればできますか?

update RunItem i, Run r, i.Shift iss, r.Shift rs 
set i.ItemId = (SELECT RunId from Run r where r.LegacyRun = i.LegacyRun and 
rs.Description 
= is.Description 
and r.WorkCenter != i.WorkCenter; 

は、このエラーを与える:

ERROR 1146 (42S02): Table 'i.Shift' doesn't exist 

UPDATE:表で

select r.RunId, i.Run, r.WorkCenter as runWork, i.WorkCenter as itemWork, 
r.Footage, i.LegacyRun as itemLegacy from Run r, RunItem i where r.RunId = i.Run 
and r.WorkCenter != i.WorkCenter and RunDate >= '2016-02-01' and RunDate <= '2016-02-29'; 

| 39550 | 39550 | P3-LAYUP  | P3-SPREADER | 260818 |  21280 | 
| 39553 | 39553 | P3-LAYUP  | P3-SPREADER | 267421 |  21281 | 
| 39566 | 39566 | P3-8FTSAWLINE | P3-SPREADER | 351547 |  21286 | 
| 39569 | 39569 | P3-8FTSAWLINE | P3-SPREADER | 527049 |  21287 | 
| 39605 | 39605 | P3-8FTSAWLINE | P3-SPREADER | 460826 |  21316 | 
| 39605 | 39605 | P3-8FTSAWLINE | P3-SPREADER | 460826 |  21316 | 
| 39605 | 39605 | P3-8FTSAWLINE | P3-SPREADER | 460826 |  21316 | 
| 39608 | 39608 | P3-8FTSAWLINE | P3-SPREADER | 458272 |  21317 | 
| 39625 | 39625 | P3-8FTSAWLINE | P3-SPREADER | 503324 |  21327 | 
| 39628 | 39628 | P3-LAYUP  | P3-SPREADER | 339615 |  21328 | 
| 39628 | 39628 | P3-LAYUP  | P3-SPREADER | 339615 |  21328 | 
+-------+-------+---------------+-------------+---------+------------+ 

select RunId, WorkCenter, Shift, 
LegacyRun from Run where Footage is null 
and RunDate >='2016-02-01' and RunDate <='2016-02-29'; 


| 39552 | P3-SPREADER | P3-DAY-SPREAD |  21280 | 
| 39555 | P3-SPREADER | P3-SWING-SPREAD |  21281 | 
| 39568 | P3-SPREADER | P3-DAY-SPREAD |  21286 | 
| 39571 | P3-SPREADER | P3-SWING-SPREAD |  21287 | 
| 39607 | P3-SPREADER | P3-DAY-SPREAD |  21316 | 
| 39609 | P3-SPREADER | P3-SWING-SPREAD |  21317 | 
| 39626 | P3-SPREADER | P3-DAY-SPREAD |  21327 | 
| 39629 | P3-SPREADER | P3-SWING-SPREAD |  21328 | 
| 39647 | P3-8FTSAWLINE | P3-DAY-SL  |  21339 | 
| 39649 | P3-8FTSAWLINE | P3-SWING-SL  |  21340 | 
+-------+---------------+-----------------+-----------+ 

私はRunItemワークセンターと実行ワークセンターが一致しないランを選択てる上、このそのRunの下でそれを教えてください RunItemのいくつかが間違った実行を指しています。以下の表は、Runsのフッテージ値が0のテーブルです。つまり、runItemをポイントしていないことを意味します。 これは、RunItem WorkCenterとRun WorkCenterがLegacyRun(RunId)とそのLegacy RunShiftを取得しても一致しない場合、workCentersが一致しないすべてのRunItemを指定して、同じLegacyRun(Id)を持つRun )と同じShift.DescriptionとLegacyRun。

UPDATE_2: はlegacyRun(ID)は、ちょうどそう底表の上部の行はまた、21280のLegacyRunを有することhappends 21280 であることを第1トップテーブルから

| 39550 | 39550 | P3-LAYUP  | P3-SPREADER | 260818 |  21280 | 

通知を取ることができ

RunItemからItemId、WorkCenterを選択した場合、Run = 39550(runItemワークセンタが実行を計算しなかったトップテーブルから実行)。 我々が得る:

+--------+-------------+ 
| ItemId | WorkCenter | 
+--------+-------------+ 
| 110336 | P3-LAYUP | 
| 110344 | P3-SPREADER | 
+--------+-------------+ 

、我々はそれを指してrunItemsを持っていない下の表の最初の行にスプレッダーのワークセンターとそのrunItemをポイントする必要があります知っています。

ので、我々はこの1行修正するには:

update RunItem set Run = 39552 where ItemId = 110344; 

を私が通過し、これを手動で行うが、私は、私は@のおかげで必要なクエリを得たすべての行に

+2

'UPDATE'節は単にテーブルをリストし、カラムは' SET'節に入ります。 – Barmar

+0

'JOIN'の' ON'節で外部キーを使用しても、 'UPDATE'節にそれらをリストしません。 – Barmar

+0

どういう意味ですか?@Barmar –

答えて

0

を更新することができる何かをしたいことBarmar:私はJOINONを追加したら、

UPDATE RunItem i JOIN Run r 
ON r.LegacyRun = i.LegacyRun 
AND r.WorkCenter = i.WorkCenter 
JOIN Run rr 
ON rr.RunId = i.Run 
SET i.Run = r.RunId 
where i.WorkCenter != rr.WorkCenter; 

これは、はるかに簡単かつエレガントなクエリです。

関連する問題