私は自分自身をトリッキーな状況に陥らせましたが、データベースの経験が限られているため、それから抜け出すことができませんでした。私のオフィスには他に3人の開発者がこれを見てもらいましたが、複数のクエリに頼らずにやりたいことを実行する方法を思いつくことはできませんでした。私はあなたが提供しなければならないかもしれないどんな助けにも本当に感謝します。
これが私のデータ構造の簡略化された見方です:
[REPORTS]
store_number
item
actual_inventory
[STORES]
store_number
store_attribute1
store_attribute2
store_attribute3
[PLANS]
store_attribute1
store_attribute2
store_attribute3
item
target_inventory
store_numberを指定すると、すべてのアイテム、actual_inventory、およびtarget_inventoryを返すことができる必要があります。
難易度:[レポート]には[プラン]にないアイテムがあり、その逆もあります。
これにより、ストアのすべての[REPORTS]アイテムが返されます。
SELECT *
FROM `REPORTS`
WHERE
`store_number` = <<SOME NUMBER>>
これにより、ストアのすべての[PLANS]アイテムが返されます。
SELECT *
FROM `PLANS`
WHERE
`store_attribute1` = (SELECT `store_attribute1` FROM `STORES` WHERE `number` = <<SOME NUMBER>>)
and `store_attribute2` = (SELECT `store_attribute2` FROM `STORES` WHERE `number` = <<SOME NUMBER>>)
and `store_attribute3` = (SELECT `store_attribute3` FROM `STORES` WHERE `number` = <<SOME NUMBER>>)
それらを組み合わせる方法がわかりません!UNIONを実行すると、_inventoryの数値を個別に(独自の列に)返すことができないようです。
2つのLEFTJOINSを実行し、UNIONを実行して、FULLJOINをシミュレートしようとしました。それは私が頭を包むことができない結果を返します。
私は、これらの最初の2つのクエリのそれぞれにVIEWSを使用し、STOREによってデータを引き出すためにSELECT FROMTHEVIEWを使用しようとしました。
私は明らかに何かが欠けています。
target_inventory番号とactual_inventory番号が関連付けられた一意のアイテムのリストを返すことができれば、アプリケーションコードの作業を大幅に節約できます。
データを再構築する必要がありますか?