从两个mysql表中检索条件数据

时间:2014-03-29 12:26:40

标签: mysql

我有一个要求,我需要从下面的两个表中找到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查询。任何建议......

提前致谢。

3 个答案:

答案 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方法可能会更好。