1対多のテーブル関係からデータを取得するのが難しいです。 「エコ」保証コードがまだ適用されていない機器契約のリストをプルする必要があります。 私のシナリオでは、機器契約テーブルと保証テーブルがあります。1対多のクエリの結果を除外する
機器・契約テーブル(EQC以下)のデザインは、次のとおりです。
------------------------------------------------------------------------------------
| EquipmentID | Contract | SerialNumber | Make | Model | Date | Customer |
------------------------------------------------------------------------------------
| 001 | A1 | GDS12 | GRND | GR219 | 2016-03-02 | Acme Corp|
| 002 | B1 | BQWSD | BQW | BLU22 | 2016-03-10 | Fast Lawn|
| 003 | C1 | Foo36 | Foo | Red18 | 2016-03-04 | Perfect T|
| 004 | D1 | Foo37 | Foo | Red18 | 2016-03-04 | Perfect T|
| 005 | E1 | Foo38 | Foo | Red18 | 2016-03-01 | Perfect T|
------------------------------------------------------------------------------------
保証テーブル(WARの以下)の設計は次のとおりです。
---------------------------------------------------
| SerialNum | Make | WarrantyCode | Warranty Date|
---------------------------------------------------
| GDS12 | GRND | Alpha | 2016-04-01 |
| GDS12 | GRND | Bravo | 2016-04-01 |
| GDS12 | GRND | Delta | 2016-04-01 |
| GDS12 | GRND | Charlie | 2016-04-01 |
| GDS12 | GRND | Echo | 2016-04-01 |
| BQWSD | BQW | Alpha | 2016-04-01 |
| BQWSD | BQW | Bravo | 2016-04-01 |
| BQWSD | BQW | Charlie | 2016-04-01 |
| BQWSD | BQW | Foxtrot | 2016-04-01 |
| BQWSD | BQW | Echo | 2016-04-01 |
| Foo36 | Foo | Alpha | 2016-04-01 |
| Foo36 | Foo | Bravo | 2016-04-01 |
| Foo36 | Foo | Charlie | 2016-04-01 |
| Foo36 | Foo | Hotel | 2016-04-01 |
---------------------------------------------------
私がする必要がどのようなプルです「エコー」保証コードがまだ適用されていないEQCのリスト。つまり、エコーレコードがないか、まだ保証記録期間がありません。
私の結果セットは次のようになります。(。彼らはエコーWarrantyCodeが適用されているのでGDS12 & BQWSDがexcluededされている)
------------------------------------------------------------------------------------
| EquipmentID | Contract | SerialNumber | Make | Model | Date | Customer |
------------------------------------------------------------------------------------
| 003 | C1 | Foo36 | Foo | Red18 | 2016-03-04 | Perfect T|
| 004 | D1 | Foo37 | Foo | Red18 | 2016-03-04 | Perfect T|
| 005 | E1 | Foo38 | Foo | Red18 | 2016-03-01 | Perfect T|
------------------------------------------------------------------------------------
が
私のクエリは次のとおりです。
SELECT EQC.EquipmentID
,EQC.Contract
,EQC.SerialNumber
,EQC.Make
,EQC.Model
,EQC.DATE
,EQC.Customer
FROM equipment - contracts EQC
LEFT JOIN warranty WAR
ON WAR.SerialNum = EQC.SerialNumber
AND WAR.Make = EQC.Make
WHERE WAR.WarrantyCode is null
OR WAR.WarrantyCode <> 'Echo'
結果セットは次のようになります。
------------------------------------------------------------------------------------
| EquipmentID | Contract | SerialNumber | Make | Model | Date | Customer |
------------------------------------------------------------------------------------
| 001 | A1 | GDS12 | GRND | GR219 | 2016-03-02 | Acme Corp|
| 001 | A1 | GDS12 | GRND | GR219 | 2016-03-02 | Acme Corp|
| 001 | A1 | GDS12 | GRND | GR219 | 2016-03-02 | Acme Corp|
| 001 | A1 | GDS12 | GRND | GR219 | 2016-03-02 | Acme Corp|
| 002 | B1 | BQWSD | BQW | BLU22 | 2016-03-10 | Fast Lawn|
| 002 | B1 | BQWSD | BQW | BLU22 | 2016-03-10 | Fast Lawn|
| 002 | B1 | BQWSD | BQW | BLU22 | 2016-03-10 | Fast Lawn|
| 002 | B1 | BQWSD | BQW | BLU22 | 2016-03-10 | Fast Lawn|
| 003 | C1 | Foo36 | Foo | Red18 | 2016-03-04 | Perfect T|
| 003 | C1 | Foo36 | Foo | Red18 | 2016-03-04 | Perfect T|
| 003 | C1 | Foo36 | Foo | Red18 | 2016-03-04 | Perfect T|
| 003 | C1 | Foo36 | Foo | Red18 | 2016-03-04 | Perfect T|
| 004 | D1 | Foo37 | Foo | Red18 | 2016-03-04 | Perfect T|
| 005 | E1 | Foo38 | Foo | Red18 | 2016-03-01 | Perfect T|
------------------------------------------------------------------------------------
これは質問の一部にしか答えるものではなく、日付を考慮する必要があります。 OPは「エコーレコードがないか、まだ保証記録期間がない」と尋ねた。 – twoleggedhorse
@twoleggedhorse:そうは思わない。エコーの保証記録があるかどうか。または、保証表の将来の日付を期待する必要があると思いますか?それで、はい、今日の日付比較を保証のどこに追加する必要がありますか? –
私は知っていますが、それは将来の日付が追加されることを意味していると思います – twoleggedhorse