我有一个要求,我需要从下面的两个表中找到form_id,form_name和owner_name。但是,如果owner_id是“ citizen”,则所有者名称将显示为“ citizen”,并且在其其他值(例如owner_level_1)的情况下,它将显示为table2中的所有者名称。我无法在table2中插入具有owner_name'citizen'的行。

select * from db.table1;

form_id form_name   owner_id
---------------------------------------------
id1     name1       citizen
id2     name2       owner_level_1
id3     name3       owner_level_2
id4     name4       citizen


select * from db.table2;


owner_id    owner_name
--------------------------
owner_level_1   alex
owner_level_2   john
owner_level_3   mike
owner_level_4   kristina


执行查询后,结果应为:

form_id form_name   owner_name
------------------------------------------
id1     name1       citizen
id2     name2       alex
id3     name3       john
id4     name4       citizen


我不能为此编写mysql查询。有什么建议么...

提前致谢。

最佳答案

SELECT
    form_id,
    form_name,
    IF(db.table2.owner_name IS NULL, db.table1.owner_id, db.table2.owner_name)
        AS owner_name
FROM db.table1
LEFT OUTER JOIN db.table2 ON db.table2.owner_id = db.table1.owner_id;


这写在我的脑海里...

它将适用于您的表,但请注意,它将为每个与表2的owner_id不匹配的条目放入表1的owner_id中。这可能是您需要的,也可能不是。如果您想要仅适用于“公民”的特殊解决方案,则@Saeed在此处描述的UNION方法可能会更好。

08-28 17:40