我有一个要求,我需要从下面的两个表中找到form_id,form_name和owner_name。但万一owner_id是' citizen'所有者名称将显示为' citizen'如果它的其他值(例如owner_level_1)它将从table2显示为所有者名称。我无法在owner_name' citizen'中插入一行。在表2中。
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查询。任何建议......
提前致谢。
答案 0 :(得分:0)
SELECT form_id, form_name, owner_id AS owner_name
FROM db.table1
WHERE owner_id like 'citizen'
UNION
SELECT form_id, form_name, owner_name
FROM db.table1,db.table2
WHERE table1.owner_id = table2.owner_id
答案 1 :(得分:0)
您需要使用if来有条件地选择要显示的内容
如,
SELECT IF(owner_id = 'Citizen', 'citizen', owner_name) AS owner_name
FROM foo;
答案 2 :(得分:0)
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;
这是我脑子里写的......
它适用于您的表,但请注意,对于无法与table2的owner_id匹配的每个条目,它将放入table1的owner_id。这可能是您需要的,也可能不是。如果你想要一个仅适用于'公民'的spcefic解决方案,那么@Saeed所描述的UNION方法可能会更好。