[英]How to conditionally join two tables
我有两个表,需要根据它们的值进行联接。
TABLE coursemat
+-----+--------+----------+
| txt | price | material |
+-----+--------+----------+
Table coprices
+--------+----------+
| price | material |
+--------+----------+
它们通过material
键连接。
如果我搜索coursemat.material
并发现coprices.material
相等,那么我必须使用coprices.price
而不是coursemat.price
。
这是我到目前为止的内容:
SELECT coursemat.txt, coursemat.price, coursemat.material, coprices, country
FROM coursemat
JOIN corprices ON coursemat.material = coprices.material;
但是,这并不能完全满足我的需求。
从本质上讲,我想用coursemat.price
如果coprices.price
不为同一物质存在coprices.material
确实存在,那么我想用coprices.price
而不是coursemat.price
。
如果我正确理解了您想要的内容,则可以使用左连接和IFNULL语句:
SELECT
coursemat.txt,
IFNULL(coprices.price, coursemat.price),
coursemat.material,
coprices.country
FROM
coursemat
LEFT JOIN
corprices
ON coursemat.material = coprices.material;
另一种选择是COALESCE:
SELECT cm.txt, cm.material, COALESCE(cp.price, cm.price) AS price
FROM coursemat cm
LEFT JOIN corprices cp ON cm.material = cp.material;
最后,您还可以使用CASE语句:
SELECT cm.txt, cm.material,
CASE WHEN cp.price IS NOT NULL THEN cp.price ELSE cm.price END AS price
FROM coursemat cm
LEFT JOIN corprices cp ON cm.material = cp.material;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.