簡體   English   中英

MySQL從表1中選擇所有行並從表2中選擇匹配的行或返回null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM