У меня есть четыре таблицы, в которых я должен присоединиться к столбцу данных. Я использовал перекрестное соединение, и в конце я получаю, что некоторые значения повторяются дважды или несколько раз. Пожалуйста помоги.
То, что я пробовал в своем коде сценария sql, это:
CREATE VIEW [dbo].[View_1]
AS
SELECT dbo.Table3.ID, dbo.Table4.Usertyp, dbo.Table4.reserved, dbo.Table2.Lotnumber, dbo.Table3.Current, dbo.Table3.Reading, dbo.Table1.LoginName, dbo.Table3.Start
FROM dbo.Table1 CROSS JOIN
dbo.Table2 CROSS JOIN
dbo.Table3 CROSS JOIN
dbo.Table4
GO
Затем, когда я выполняю, я получаю ввод данных несколько раз, я делаю что-то не так. Пожалуйста помоги. Мне нужен был идентификатор из таблицы 3, тип пользователя из первой строки таблицы 4, зарезервированный из таблицы 4, номер лота из данных первой строки таблицы 2. Как я могу перенести всю последовательную запись в новую таблицу, используя данные четырех таблиц. Спасибо.
Конечный результат есть. Мне нужен идентификатор из таблицы 3 и соответствующие данные из других столбцов таблицы: конечный результат должен выглядеть так:

Пожалуйста, используйте текст, а не изображения/ссылки, для текста, включая таблицы и ERD. Перефразируйте или процитируйте другой текст. Используйте изображения только для того, что не может быть выражено в виде текста или для дополнения текста. Изображения нельзя искать или вырезать и вставлять. Включите легенду / ключ и объяснение с изображением. Сделайте свой пост автономным.
Пожалуйста, в вопросах по коду укажите минимальный воспроизводимый пример - вырезать, вставить и выполнить код; пример ввода с желаемым и фактическим выводом (включая дословные сообщения об ошибках); теги и четкая спецификация и объяснение. Это включает в себя наименьший код, который вы можете дать, то есть код, который, как вы показываете, в порядке, расширенный кодом, который вы показываете, не в порядке. (Основы отладки.) Для SQL, который включает СУБД/продукт и DDL, включая ограничения и индексы, а также инициализацию базовой таблицы в табличном формате. Используйте достаточное количество слов, предложений и ссылок на части примеров, чтобы ясно и полностью выразить то, что вы имеете в виду. PS Явно тут не минимальные данные.


Проблема в том, что вы используете перекрестное соединение. Не делай этого. Это объединяет каждую строку каждой таблицы в каждой комбинации. Это может стать уродливым очень быстро.
Следующее должно помочь вам в этом, однако недостаточно информации о том, с чем сопоставить вашу таблицу 4. Итак, как только вы это поймете, вы сможете продолжить этот подход, который я перечисляю:
CREATE VIEW [dbo].[View_1]
AS
SELECT dbo.Table3.ID
, dbo.Table4.Usertyp
, dbo.Table4.reserved
, dbo.Table2.Lotnumber
, dbo.Table3.Current
, dbo.Table3.Reading
, dbo.Table1.LoginName
, dbo.Table3.Start
FROM dbo.Table3 t3
INNER JOIN dbo.Table1 t1 on t3.UserID = t1.ID
INNER JOIN dbo.Table2 t2 on t3.LotID = t2.LotID
INNER JOIN dbo.Table4 ....
GO
Проблема не в CROSS JOIN как таковом. Проблема в отсутствии условий. Ваши INNER JOIN ON могут быть изменены на CROSS JOIN и WHERE.
@DrDoomPDX сначала сделал то же самое с INNER JOIN. Поскольку у каждой таблицы есть идентификатор, и мне интересно взять только идентификатор таблицы 3. Конечным результатом является то, что я получаю повторяющиеся данные одной и той же строки. Например, ID 30,31,32.. с теми же данными для Usertyp, зарезервировано, Lotnumber, Current, Reading, Loginname, Start.
@ user9630935 Вероятно, это потому, что в вашей таблице 4 нет хорошего ключа, против которого можно было бы пойти. Его ID не такой, как у других. вы не можете сопоставить ПК с ПК таким образом.
Кроме того, я только что сделал правку. Я неправильно назвал Table2 псевдонимом t3. Это исправлено. Но вам по-прежнему нужен внешний ключ в таблице 4, чтобы вы могли присоединить его к соответствующей таблице. Кроме того, я бы проигнорировал совет использовать соединение CROSS с добавленным предложением where. Оптимизатор запросов SQL собирается изменить это на внутреннее соединение за кулисами. Соединения CROSS созданы для того, чтобы дать вам любую комбинацию всего. Так что я бы использовал их только для этой цели. Иначе у вас получится бардак.
Первый вопрос, почему
CROSS JOIN? Гугл чтоCROSS JOINделать.