Вставьте строку в пустую таблицу с помощью команды INSERT... SELECT... FROM в SQL

Я собираюсь создать новую таблицу (PersonInformation) со столбцами другого (Members) и еще несколькими столбцами, такими как «Имя пользователя», «Пароль» и «PersonId».

Я использовал команду: 'INSERT INTO myTable (Columns_in_PersonInformation...) SELECT (Columns_in_Members + new_columns) FROM Members, PersonInformation ГДЕ Members.id = PersonInformation.PersonId'

У меня две проблемы: первый, когда таблица PersonInformation пуста. Результатом является «затронуто 0 строк» ​​второй, когда я добавляю одну строку в таблицу PersonInformation, при каждом запуске код добавляет строки экспоненциально (2, 4, 8, 16, 32,...).

Вот мой код: '''

INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT dbo.Members.FirstName,dbo.Members.LastName, dbo.Members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM dbo.Members , dbo.PersonInformation
WHERE dbo.Members.id = dbo.PersonInformation.PersonId

'''

можете ли вы написать скрипт, чтобы более подробно объяснить вашу проблему sqlfiddle.com

Nitin S 17.05.2022 06:17
Плохие привычки, от которых нужно избавляться: использование JOIN в старом стиле — этот старый стиль список таблиц через запятую был заменен синтаксисом правильный ANSI JOIN в стандарте SQL ANSI-92 (30 лет!! назад), и его использование не рекомендуется.
marc_s 17.05.2022 06:57
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
2
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Второй, когда я добавляю одну строку в таблицу PersonInformation - данные увеличиваются в геометрической прогрессии : используйте приведенный ниже синтаксис соединения, который может отличаться в запросе.

INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT members.FirstName,members.LastName, members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM dbo.Members members INNER JOIN dbo.PersonInformation pii
ON members.id = pii.PersonId

Вы можете изменить его на RIGHT JOIN с проверкой DISTINCT или NULL в соответствии с вашим условием.

Если вам нужна только одна запись из таблицы pii, используйте ВЫБЕРИТЕ ВЕРХНИЙ 1 CTE или КРЕСТ применять.

Спасибо, Амит. Да, вы правы насчет первого вопроса, но проблема в том, что когда я использую LEFT JOIN, таблица Member полностью копируется в таблицу PersonInformation, чего я не хочу. Я хочу, чтобы только одна строка с этим условием «Members.id = @PersonId» была скопирована в таблицу PersonInformation, а также добавить «Имя пользователя», «Пароль» и «PersonID» из строки.

Vahid 17.05.2022 06:56

Обновлен ответ на включение одной записи из таблицы pii

Amit Kumar Singh 17.05.2022 07:37

Спасибо за помощь, Амит,

Вторая проблема решена со следующими изменениями:

INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT DISTINCT dbo.Members.FirstName,dbo.Members.LastName, dbo.Members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM Members INNER JOIN dbo.PersonInformation
ON Members.id = @PersonId

Первая проблема все еще сохраняется, но я пока добавил в таблицу фиктивную строку.

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