mysql - 如果'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 |
请帮忙。谢谢你。
解决方案
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
在tableb
. 如果可以有更多,那么GROUP BY
可能需要一个。
推荐阅读
- perl - 如何转储所有 Mojolicious 路线?
- javascript - 可拖动的 jQuery UI 在放置时具有生涩的过渡
- git - Git commit 仅将部分更改提交到一个文件
- windows - Windows 任务计划程序未运行完整的批处理文件
- c# - LINQ 查询需要更多时间来执行
- python - 在执行自定义 django 命令时排除 Django 已安装的应用程序
- python - Pyenchant:如何以“err.word,string”格式打印结果
- javascript - 我正在尝试使用模板文字在 html 中显示来自 javascript 的文本,但元素未定义,我该怎么办?
- output - getline 不适用于 fstream 输出
- java - Libgdx 将一个演员的动作传递给另一个演员