2016-05-18 64 views
0

早安,MySQL的 - 从2 SQL的联盟获得不同的值查询

我想从两个SQL查询的UNION ALL不同值,从他们的标签基于此查询。

SELECT t.id, t.tag, bd.owner, bp.param_value as role 
FROM baseData db 
LEFT JOIN baseParam bp ON bp.`status` = "active" AND bp.param_name = "role" AND bp.base_data_id = bd.id 
RIGHT JOIN tag t ON t.base_data_id = bp.base_data_id AND t.`status` = "active" 
WHERE bd.`status` = "active" AND bd.application = "template" 
AND (((bp.param_value = "public" OR bp.param_value IS NULL))) 
GROUP BY t.tag 

UNION 

SELECT t.id, t.tag, bd.owner, bp.param_value as role 
FROM baseData bd 
LEFT JOIN baseParam bp ON bp.`status` = "active" AND bp.param_name = "role" AND bp.base_data_id = bd.id 
RIGHT JOIN tag t ON t.base_data_id = bp.base_data_id AND t.`status` = "active" 
INNER JOIN resTemplate cr ON cr.base_data_id = bd.id 
WHERE bd.`status` = "active" AND bd.application = "template" AND cr.`status` = "active" 
AND (((bp.param_value = "private" OR bp.param_value IS NULL))) 
GROUP BY t.tag; 

这两个查询来自同一个表,唯一的区别是他们的角色是“公共”和“私人”。私人也有另一张桌子的考虑。该查询返回此表

enter image description here

此表

,你可以在红盒子看到,在标签栏,集团被重复。以及其他一些标签名称。 我如何更改我的sql查询来过滤它,以便Tag列是不同的?

+0

你想这两个排在结果中包括哪些内容? –

+0

两者之一。我所需要的只是其中一个被包括在结果中。 –

+0

你使用了什么数据库? – Blank

回答

0

试试这个请;)

SELECT * FROM 
    (SELECT t.id, t.tag, bd.owner, bp.param_value as role 
    FROM baseData db 
    LEFT JOIN baseParam bp ON bp.`status` = "active" AND bp.param_name = "role" AND bp.base_data_id = bd.id 
    RIGHT JOIN tag t ON t.base_data_id = bp.base_data_id AND t.`status` = "active" 
    WHERE bd.`status` = "active" AND bd.application = "template" 
    AND (((bp.param_value = "public" OR bp.param_value IS NULL))) 

    UNION 

    SELECT t.id, t.tag, bd.owner, bp.param_value as role 
    FROM baseData bd 
    LEFT JOIN baseParam bp ON bp.`status` = "active" AND bp.param_name = "role" AND bp.base_data_id = bd.id 
    RIGHT JOIN tag t ON t.base_data_id = bp.base_data_id AND t.`status` = "active" 
    INNER JOIN resTemplate cr ON cr.base_data_id = bd.id 
    WHERE bd.`status` = "active" AND bd.application = "template" AND cr.`status` = "active" 
    AND (((bp.param_value = "private" OR bp.param_value IS NULL)))) TMP 
GROUP BY tag; 
+0

o。哇。感谢这一点。现在我需要将这个查询翻译成php yii2 ..非常感谢。 –