Как отличить пользователя на 2 столбца - PullRequest
0 голосов
/ 02 июля 2019

у меня есть такая таблица

создать таблицу 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?

Мне нужно показать все отчетливо (пользователь).Таким образом, id_source ИЛИ id_cible от всех уникальных пользователей в таблице Test1, поэтому я не могу только сделать: Выберите отдельный id_source, id_cible, потому что он может быть один в столбце id_cible только в столбце id_source, но не находиться в другом столбце.

Правило: 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 union Выберите id_cible из теста 1.

но после того, как я на это рассчитывал?

Для id (x), например, id: 1, я бы знал, насколько отчетливо (у него есть идентификатор друга) в столбце id_source или в id_cible_column.

Так как я посчитал это с помощью запроса sql?

Спасибо!

1 Ответ

0 голосов
/ 02 июля 2019

Я не на 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

dbfiddle здесь

EDIT

Прочитав и перечитав вопрос, я думаю , что вы ищете

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

dbfiddle здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...