我有一个要求,我需要从下面的两个表中找到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方法可能会更好。