[英]Mysql select all rows from table1 and matching rows from table2 or return null
我需要從所有條件匹配的price_list中獲取所有產品列以及unit_price列。
問題是我的select語句僅獲取ID分別為1、2、2的產品,我需要獲取ID為3,4的產品,依此類推,但是unit_price為null,因為price_list中沒有該數量的商品。
products
--------------------------------------------
id product_code purchase_type quantity
1 106 new 5
2 107 renew 26
3 107 renew 101
4 107 renew 150
price_list
----------------------------------------------------------------------
id product_code purchase_type minimum maximum unit_price
1 106 new 1 25 20
2 106 new 26 50 16
3 106 new 51 100 14
SELECT
`products`.`id` AS `product_id`,
`products`.`product_code` AS `product_product_code`,
`products`.`purchase_type` AS `product_purchase_type`,
`products`.`update_type` AS `product_update_type`,
`products`.`quantity` AS `product_quantity`,
`price_list`.`product_code` AS `price_list_product_code`,
`price_list`.`purchase_type` AS `price_list_purchase_type`,
`price_list`.`update_type` AS `price_list_update_type`,
`price_list`.`minimum` AS `price_list_minimum`,
`price_list`.`maximum` AS `price_list_maximum`,
`price_list`.`unit_price` AS `price_list_unit_price`
FROM
`products`
INNER JOIN `price_list` ON `products`.`product_code` = `price_list`.`product_code`
WHERE
`products`.`product_code` = price_list.product_code
AND `products`.`purchase_type` = price_list.purchase_type
AND `products`.`update_type` = price_list.update_type
AND `products`.`quantity` >= price_list.minimum
AND `products`.`quantity` <= price_list.maximum
ORDER BY
`products`.`id` ASC
我希望我的select語句能給我這樣的東西:
Select Result:
-------------------------------------------------------
id product_code purchase_type quantity unit_price
1 106 new 5 20
2 107 renew 26 16
3 107 renew 101 null
4 107 renew 150 null
當前選擇僅獲得ID 1和2。
您可能的解決方案是
SELECT
`products`.`id` AS `product_id`,
`products`.`product_code` AS `product_product_code`,
`products`.`purchase_type` AS `product_purchase_type`,
`products`.`quantity` AS `product_quantity`,
`price_list`.`product_code` AS `price_list_product_code`,
`price_list`.`purchase_type` AS `price_list_purchase_type`,
`price_list`.`minimum` AS `price_list_minimum`,
`price_list`.`maximum` AS `price_list_maximum`,
`price_list`.`unit_price` AS `price_list_unit_price`
FROM
`products`
LEFT JOIN `price_list` ON `products`.`product_code` = `price_list`.`product_code`
AND `products`.`purchase_type` = price_list.purchase_type
AND `products`.`quantity` >= price_list.minimum
AND `products`.`quantity` <= price_list.maximum
ORDER BY
`products`.`id` ASC
如果您使用sqlfiddle鏈接獲得更多數據,那就更好了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.