繁体   English   中英

如何有条件地联接两个表

[英]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.

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