我在此查询中需要帮助。假设有下表
| 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 |
任何帮助都会很棒!感谢
答案 0 :(得分:4)
首先找到node_name
和status
然后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