我有一张这样的桌子
创建表test1(id_source号,id_cible号)
在此表中我有:
1 2
1 3
1 4
1 5
2 1
1 6
10 4
10 4
5 1
2 6
在此示例中,我将得到以下结果:1-2-3-4-5-10(6行),但是我如何通过请求sql得到它?
我需要显示所有不同的用户。因此,我只能从表Test1中的所有唯一用户获取id_source或id_cible,所以我只能这样做:选择不同的id_source,id_cible,因为他只能在id_source列中的id_cible列中一个人,而不能在另一列中。
规则: id只能在1列中,例如:
1-2
1-3
所以id 1只能在id_source中。 或者他可以同时在两列中:
1-2
2-1
-例如,如果我只有1行
id source =1 and id_cible = 2.
我想得到两行。
line 1: id: 1
line 2: id: 2
-所以我从这里开始:
选择id_source 从测试1 联盟 选择id_cible 来自测试1。
但是之后,我如何指望呢?
对于id(x)示例id:1,我想知道id_source列或id_cible_column中有多少不同(他的朋友ID)。
那我怎么用请求sql算出来呢?
谢谢!
答案 0 :(得分:0)
我不清楚您要查找的内容是否是100%清楚,但是如果我正确解释了您的问题,则可以使用UNION和ORDER BY:
SELECT ID_SOURCE AS ID FROM TEST1
UNION
SELECT ID_CIBLE FROM TEST1
ORDER BY ID
产生
ID
1
2
3
4
5
6
10
7 rows
阅读并重新阅读问题后,我认为您正在寻找的是
WITH cteData AS (SELECT ID_SOURCE AS ID, ID_CIBLE AS FRIEND FROM TEST1
UNION
SELECT ID_CIBLE AS ID, ID_SOURCE AS FRIEND FROM TEST1)
SELECT ID, COUNT(FRIEND)
FROM cteData
GROUP BY ID
ORDER BY ID
这会产生结果
ID COUNT(FRIEND)
1 5
2 2
3 1
4 2
5 1
6 2
10 1
7 rows