首页 > 解决方案 > 如果'table a'.'column a'匹配'table b'.'column a',如何用'table b'.'column b'替换'table a'.'column b'

问题描述

我有2张桌子如下: -

表A

-------------------------------
| product_id | price           |
-------------------------------
| 1          | 2.2000          |
| 2          | 0.0000          |
| 3          | 0.3333          |

表 B

-------------------------------
| product_id | price_discount  |
-------------------------------
| 1          | 1.8000          |

如上所述,如何使用 select 语句选择 2 个表的价格范围?

例子:-SELECT * FROM TABLE A WHERE **price or price discount** BETWEEN 0 AND 2;

由于 product_id 有 discount_price = 1.8(在 0 到 2 价格范围内),预期结果将显示。

 -------------------------------
 | product_id | price           |
 -------------------------------
 | 1          | 2.2000          |
 | 2          | 0.0000          |
 | 3          | 0.3333          |

请帮忙。谢谢你。

标签: mysqlselect

解决方案


LEFT JOIN两个表之间的简单可能就足够了。LEFT JOIN完成是因为我们可以在两个表之间有不匹配的行。

编辑:tb.price_discount IS NOT NULL以前的版本对;进行了额外检查 但它真的不需要,BETWEEN..AND就足够了。

OR操作员文档中解释说,1 OR NULL = 1

SELECT ta.*
FROM tablea AS ta
LEFT JOIN tableb AS tb 
  ON ta.product_id = tb.product_id 
WHERE ta.price BETWEEN 0 AND 2
        OR 
      tb.price_discount BETWEEN 0 AND 2

上面的解决方案是基于这样的假设,即product_idtableb. 如果可以有更多,那么GROUP BY可能需要一个。


推荐阅读