shop テーブル、stock テーブル、stock_amounts テーブルの 3 つのテーブルがあります。shop テーブルは各ショップの詳細を定義し、stock テーブルはすべての在庫アイテムを定義し、stock_mounts テーブルは各ショップがアイテムの在庫をどれだけ持っているかを定義します。
私のテーブルは次のようになります。
*Shop table:
| id | shop
-------------
| 1 | Head Office
| 2 | shop 1
*Stock table:
| id | stock_description
------------------------
| 1 | Some description
| 2 | Some description
| 3 | Some description
*Stock amounts table:
| id | shop_id | stock_id | stock_amount
------------------------------------------
| 1 | 1 | 1 | 5
| 2 | 2 | 2 | 4
ショップの在庫をすべて表示したいのですが、そのショップに定義されていない在庫も表示します。たとえば、ショップ 1 には在庫 1 が 5 つありますが、在庫 2 または在庫 3 はありません。在庫 2 および 3 をゼロまたは NULL 値として表示したいと考えています。
私は現在、すべてに参加しています。句に何も指定しない場合WHERE
、在庫のあるすべてのショップが表示され、未定義の値には NULL が表示されます。すると、すべての NULL 値がWHERE stock_amounts.id <> '2'
表示されなくなります。
知りたいこと:
1) WHERE 句で 'not 2' を指定すると NULL が表示されなくなったのはなぜですか?
2) これを行う適切な方法は何ですか? また、適切な MySQL クエリはどのようになりますか?
編集:
はっきり言って、どのショップがどの在庫を持っているかは問題ありません。私が抱えている問題は、ショップ 1が持っているすべての在庫 +ショップ 1が持って いないすべての在庫を表示することです。
私のクエリ:
SELECT shop, stock.id stock_id, description, amount
FROM stock
LEFT JOIN shop_stock ON shop_stock.stock_id = stock.id
このクエリは次を返します:
|shop|stock_id|description |amount
--------------------------------------
|1 |1 |Some description|5
|2 |2 |Some description|4
|NULL|3 |Some description|NULL
を追加するWHERE shop <> '2'
と、NULLも消えます。ショップ 1の次のテーブルを返すクエリが必要です。
|shop|stock_id|description |amount
--------------------------------------
|1 |1 |Some description|5
|NULL|2 |Some description|NULL
|NULL|3 |Some description|NULL