如何有条件地连接两个表

时间:2018-01-13 00:04:18

标签: sql mariadb

我有两张表需要加入,具体取决于它们的值。

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 1}}。

2 个答案:

答案 0 :(得分:3)

如果我理解你想要什么,你可以使用左连接和IFNULL语句:

SELECT
    coursemat.txt, 
    IFNULL(coprices.price, coursemat.price),
    coursemat.material, 
    coprices.country
FROM
    coursemat
LEFT JOIN
    corprices 
    ON coursemat.material = coprices.material;

答案 1 :(得分:1)

另一个选择是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;