Как присоединиться к данным столбца трех таблиц Sql с помощью Join

У меня есть четыре таблицы, в которых я должен присоединиться к столбцу данных. Я использовал перекрестное соединение, и в конце я получаю, что некоторые значения повторяются дважды или несколько раз. Пожалуйста помоги.

То, что я пробовал в своем коде сценария 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. Как я могу перенести всю последовательную запись в новую таблицу, используя данные четырех таблиц. Спасибо.

Как присоединиться к данным столбца трех таблиц Sql с помощью JoinКак присоединиться к данным столбца трех таблиц Sql с помощью JoinКак присоединиться к данным столбца трех таблиц Sql с помощью JoinКак присоединиться к данным столбца трех таблиц Sql с помощью Join

Конечный результат есть. Мне нужен идентификатор из таблицы 3 и соответствующие данные из других столбцов таблицы: конечный результат должен выглядеть так: Как присоединиться к данным столбца трех таблиц Sql с помощью Join

Первый вопрос, почему CROSS JOIN? Гугл что CROSS JOIN делать.

Eric 28.06.2019 18:08

Пожалуйста, используйте текст, а не изображения/ссылки, для текста, включая таблицы и ERD. Перефразируйте или процитируйте другой текст. Используйте изображения только для того, что не может быть выражено в виде текста или для дополнения текста. Изображения нельзя искать или вырезать и вставлять. Включите легенду / ключ и объяснение с изображением. Сделайте свой пост автономным.

philipxy 29.06.2019 13:20

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

philipxy 29.06.2019 13:29
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы используете перекрестное соединение. Не делай этого. Это объединяет каждую строку каждой таблицы в каждой комбинации. Это может стать уродливым очень быстро.

Следующее должно помочь вам в этом, однако недостаточно информации о том, с чем сопоставить вашу таблицу 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.

philipxy 29.06.2019 13:23

@DrDoomPDX сначала сделал то же самое с INNER JOIN. Поскольку у каждой таблицы есть идентификатор, и мне интересно взять только идентификатор таблицы 3. Конечным результатом является то, что я получаю повторяющиеся данные одной и той же строки. Например, ID 30,31,32.. с теми же данными для Usertyp, зарезервировано, Lotnumber, Current, Reading, Loginname, Start.

user9630935 01.07.2019 08:30

@ user9630935 Вероятно, это потому, что в вашей таблице 4 нет хорошего ключа, против которого можно было бы пойти. Его ID не такой, как у других. вы не можете сопоставить ПК с ПК таким образом.

DrDoomPDX 02.07.2019 15:19

Кроме того, я только что сделал правку. Я неправильно назвал Table2 псевдонимом t3. Это исправлено. Но вам по-прежнему нужен внешний ключ в таблице 4, чтобы вы могли присоединить его к соответствующей таблице. Кроме того, я бы проигнорировал совет использовать соединение CROSS с добавленным предложением where. Оптимизатор запросов SQL собирается изменить это на внутреннее соединение за кулисами. Соединения CROSS созданы для того, чтобы дать вам любую комбинацию всего. Так что я бы использовал их только для этой цели. Иначе у вас получится бардак.

DrDoomPDX 02.07.2019 16:48

Другие вопросы по теме