我有两个单独的查询,几乎可以返回相同的内容:
select id
from t
where id<>''
GROUP BY id
having count(*) >= 2;
select id
from t2
where id is not null
GROUP BY id
having count(*) >= 2
ORDER BY id ASC;
其值出现多次的ID列表。第一个查询返回的次数超过了第二个,所以我需要以某种方式将它们连接起来以获得第一个查询中的结果,但不是第二个查询中的结果。我试图做左连接,但它无法正常工作。
我也试过以下无济于事:
select id
from t
where id<>''
GROUP BY id
having count(*) >= 2
not in (select id from t2 where id is not null GROUP BY id having count(*) >= 2
ORDER BY id ASC)
其他信息
查询一个给了我所有与表1具有相同值的ID,查询2给了我与表2相同的值。还有其他的问题,比如表1中有一些空白ID,而有一些表2中为空,因此条件不包括前者的空白和后者的空值。所以我收回这两个单独的结果,几乎是相同的,除了在结果1中有声称不在结果2 但仅在运行这些查询时,因为它们在表1中重复但不是在表2中,虽然它们确实存在于表2中。所以一个简单的左连接,其中t1.id&lt;&gt; t2.id将无效,因为它们确实存在于t2中。
答案 0 :(得分:1)
SELECT t.id, t2.id FROM t
LEFT OUTER JOIN t2
ON t.id <> t2.id
WHERE t.id<>''
GROUP BY t.id having count(t.id) >= 2
ORDER BY t.id ASC
我假设您的不在部分之前,子查询实际上意味着表t和t2中的id不相同,因此添加条件 t.id&lt;&gt; t2.id
修改强>
SELECT t.id FROM t
WHERE t.id<>''
AND t.id NOT IN (SELECT id FROM t2 where id is not null )
GROUP BY t.id having count(t.id) >= 2
ORDER BY t.id ASC
答案 1 :(得分:1)
您想在t1
中选择不在t2
中的ID。 JOIN
上的t2
,并确保结果为NULL
。
SELECT t.id
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
WHERE t2.id IS NULL
GROUP BY t.id
HAVING COUNT(t.id) > 1