У меня есть вопрос, и надеюсь, вы поможете мне. :)
У меня есть такая таблица:
ID Col1 Col2 ReverseID
1 Number 1 Number A
2 Number 2 Number B
3 Number 3 Number C
Чего я хочу добиться:
- Создать дубликаты каждой записи с переключенными столбцами и добавить их в исходную таблицу
- Добавить идентификатор дубликата в столбец ReverseID исходной записи и наоборот
Итак, новая таблица должна выглядеть так:
ID Col1 Col2 ReverseID
1 Number 1 Number A 4
2 Number 2 Number B 5
3 Number 3 Number C 6
4 Number A Number 1 1
5 Number B Number 2 2
6 Number C Number 3 3
То, что я до сих пор делал, работало с временной таблицей:
SELECT * INTO #tbl
FROM myTable
UPDATE #tbl
SET Col1 = Col2,
Col2 = Col1,
ReverseID = ID
INSERT INTO DUPLICATEtable(
Col1,
Col2,
ReverseID
)
SELECT Col1,
Col2,
ReverseID
FROM #tbl
В этом примере кода я использовал вторичную таблицу только для того, чтобы убедиться, что я не скомпрометировал исходные записи данных.
Я думаю, что мог бы пропустить часть SET и изменить столбцы в последнем операторе SELECT, чтобы добиться того же, но я не уверен.
Так или иначе - с этим я заканчиваю в:
ID Col1 Col2 ReverseID
1 Number 1 Number A
2 Number 2 Number B
3 Number 3 Number C
4 Number A Number 1 1
5 Number B Number 2 2
6 Number C Number 3 3
Таким образом, остается вопрос: как правильно добавить ReverseID в исходные записи?
Поскольку мои знания SQL довольно низки, я почти уверен, что это не самый простой способ сделать что-то, поэтому я надеюсь, что вы, ребята и девушки, сможете просветить меня и привести меня к более элегантному решению.
Заранее спасибо!
ш
MRT
Edit:
Я пытаюсь проиллюстрировать мою первоначальную проблему, поэтому эта публикация становится длинной. ;)
.
Прежде всего: мой веб-интерфейс не допускает никаких операторов SQL, я должен сосредоточиться на классах, атрибутах, отношениях.
Первая причина:
Экземпляры класса B (B1, B2, B3, ...) связаны между собой в классе Relation, это отношения «многие ко многим» одного и того же класса. Мой интерфейс не позволяет объединять таблицы, так что это обходной путь.
Заявление о том, что пользователь добавляет отношение с B1 в качестве первой стороны (я только что назвал его «слева») и B2 в качестве второй стороны (справа):
При переходе от B1 будут отображаться два отношения (FK_Left, FK_Right), но только одно из них будет содержать значение (скажем, FK_Left).
При переходе от B2 значение будет указано только в другом отношении (FK_Right).
Таким образом, на стороне пользователя всегда отображаются два отношения, но это зависит от того, как была введена запись, если можно найти данные за отношением_теллоу или отношением_право.
Это практически невозможно.
Если у меня были все записи с обратными партнерами, я могу просто скрыть одно из отношений, и пользователь увидит всю информацию, стоящую за одним отношением, независимо от того, как оно было введено.
Вторая основная причина:
Интерфейс предоставляет некоторое матричное представление, которое получает класс отношений в качестве входных данных и отображает левых партнеров в столбцах и правых партнеров в строках.
Допустим, я хочу видеть все экземпляры A в столбцах и их партнеров в строках, это возможно только в том случае, если все отношения, относящиеся к экземплярам A, вводятся одинаково, например, все экземпляры A в качестве левого партнера.
Матричное представление должно быть свободно фильтруемым в отношении строк и столбцов, поэтому, если у меня были дублирующиеся отношения, я могу фильтровать по любому из партнеров в строках и столбцах.
извините за длинный текст, надеюсь, это прояснило мою ситуацию.