繁体   English   中英

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

[英]how to replace 'table a'.'column b' with 'table b'.'column b' if 'table a'.'column a' matches 'table b'.'column a'

我有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          |

请帮忙。 谢谢。

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

编辑:以前的版本做了tb.price_discount IS NOT NULL额外检查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

以上解决方案基于以下假设: tableb中将有0或1行对应于product_id 如果可以更多,则可能需要GROUP BY

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM