如果'表a'。'列a'与'表b'。'列a'匹配,如何用'表b'。'列b'替换'表a'。'列b'

时间:2018-11-29 03:51:55

标签: mysql select

我有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的折扣价格= 1.8(0到2价格范围内),因此将显示预期结果。

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

请帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

两个表之间一个简单的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_id中将有0或1行对应于tableb。如果还有更多,则可能需要GROUP BY