SQL Query显示相反的值

时间:2016-05-16 16:32:38

标签: mysql sql

我在此查询中需要帮助。假设有下表

| Node_Name| Status |
+----------+-----------+
| Node_1   | a |
| Node_1   | b |
| Node_2   | c |
| Node_2   | a |
| Node_3   | b |
| Node_3   | c |

我需要获得节点没有的所有状态。

例如输出应如下:

 | Node_Name| Status |
 +----------+-----------+
 | Node_1   | c |
 | Node_2   | b |
 | Node_3   | a |

任何帮助都会很棒!感谢

2 个答案:

答案 0 :(得分:4)

首先找到node_namestatus

的所有可能组合

然后Left Outer join以上结果使用yourtable并仅过滤不匹配的记录以获得结果

试试这个

SELECT A.node_name, 
       B.status 
FROM   (SELECT DISTINCT node_name 
        FROM   yourtable) A 
       CROSS JOIN (SELECT DISTINCT status 
                   FROM   yourtable) B 
       LEFT OUTER JOIN yourtable C 
                    ON A.node_name = C.node_name 
                       AND C.status = B.status 
WHERE  C.status IS NULL 

答案 1 :(得分:0)

这是一个非常棘手的查询,因为它的结果超出了表的集合。

SELECT
    full_set.*
FROM
    (
        SELECT DISTINCT
            Node_Name,
            statuses.Status
        FROM
            table1
        CROSS JOIN(SELECT Status FROM table1)statuses
    ) full_set
LEFT JOIN table1 original_table 
  ON full_set.Node_Name = original_table.Node_Name AND full_set.Status = original_table.Status
WHERE
    original_table.Node_Name IS NULL
AND original_table.Status IS NULL