0

我是 sql 新手,我遇到了一个问题。我有一个通话记录表,其中包含两列AnumberBnumber. 如果有任何号码呼叫,则会在表格中添加一个新行,其中 Anumber 为 Source,Bnumber 为 Destination。

我已经给出了两个 Anumber 值(3217913664,3006307180)现在我必须从 Bnumber 中找到所有值(由 Anumber 调用)

假设我的桌子是:

ANUMBER        BNUMBER
-------        --------
3217913664     3006307180
3217913664     3212026005
3006307180     3212026005
3006307180     3212026007
3006307180     3212026008
3006307180     3212026009
3217913664     3212026009

现在我想value(3212026005 and 3212026009)从 Bnumber 中提取,因为这两个数字都是由给定的数字调用的。所以我基本上只需要提取那些被所有给定号码调用的号码。

我的英语不太好,但我想我解释了我的问题。知道如何实现这种情况吗?

4

2 回答 2

1

这是一种方法:

select bnumber
from t
where anumber in (3217913664, 3006307180)
group by bnumber
having min(anumber) < max(anumber);

如果行没有重复项,则 usingcount(*) = 2是一种替代方法。

如果您anumber要测试的 2 秒以上,则使用count(distinct anumber) = n,其中nin列表中值的数量。

于 2017-07-21T13:55:39.747 回答
0

你可以试试这个:

select  Bnumber
from    yourtable
group by Bnumber
having COUNT(Bnumber) = (SELECT COUNT(*) FROM (SELECT DISTINCT Anumber FROM yourtable) AS T)

这是一个通用的。如果您在表中插入另一个 Anumber,则查询仍然有效。只有一个警告:也许这不是解决您的问题的最佳方法,但我现在无法考虑其他查询。也许以后我会尝试优化查询。

于 2017-07-21T14:28:05.943 回答