我有 3 个表:一个 shop 表、一个 stock 表和一个 stock_amounts 表。shop 表定义了每个商店的详细信息,stock 表定义了所有库存商品,stock_amounts 表定义了每个商店的商品库存量。
我的表如下所示:
*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 有 5 个库存 1,但没有库存 2 或库存 3。我希望库存 2 和 3 显示为零或 NULL 值。
我目前正在一起加入。如果我没有在WHERE
子句中指定任何内容,则会显示所有带有库存的商店,并为未定义的值显示 NULL。如果我这样做WHERE stock_amounts.id <> '2'
了,那么所有 NULL 值都不再显示。
我想知道的是:
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 也会消失。我想要一个查询,它将返回shop 1的下表:
|shop|stock_id|description |amount
--------------------------------------
|1 |1 |Some description|5
|NULL|2 |Some description|NULL
|NULL|3 |Some description|NULL