2015-02-11 4 views
0

Как добавить несколько значений в один столбец таблицы в SQL? Мой стол выглядит так:SQL-запрос для ввода нескольких значений столбца

Create table emp 
(
    id number(5), 
    name varchar(25), 
    phone varchar(25) 
); 

Теперь я хочу добавить значения и несколько телефонов в столбце телефона. Как это сделать? Я попытался с помощью

insert into emp values (id, name, phone) 
values (1, lee, (23455, 67543)); 

, но это не работает

+3

Это не то, как работает SQL. У вас может быть только одна запись для каждого столбца. Сначала возьмите базовый учебник. –

+0

плохо спроектированная схема. отдельный номер телефона из таблицы emp. – SMA

+0

У обоих есть два телефона без столбцов (работа, ячейка) или другая таблица только для телефонных номеров. – jarlh

ответ

1

Используйте два insert заявления вместо

insert into emp values (id, name,phone) values (1,'lee','23455'); 
insert into emp values (id, name,phone) values (1,'lee','67543'); 

или если вы хотите сохранить оба значения в одной строке

insert into emp values (id, name,phone) values (1,'lee','23455,67543'); 

Здесь таблица не normalised. Вам нужно либо сохранить информацию о номере телефона в отдельной таблице, либо использовать два разных столбца в одной таблице.

Попробуйте изменить дизайн стола таким образом.

EMP стол

CREATE TABLE emp 
    (
    emp_id INT IDENTITY(1, 1) PRIMARY KEY, 
    name VARCHAR(25) 
); 

PhoneNumber Таблица

CREATE TABLE PhoneNumber 
    (
    phoneno_id INT IDENTITY(1, 1), 
    emp_id  INT, 
    Phone_Number int, 
    Cell_Number Int, 
    FOREIGN KEY (emp_id) REFERENCES emp(emp_id) 
) 

Примечание:Auto increment синтаксис может отличаться в зависимости от используемой базы данных.

+0

Вы забыли упомянуть, что с правильным первичным ключом вы не можете хранить две строки для пользователя. – jarlh

+0

Значит, мне нужно сначала нормализовать таблицу? как это сделать ?? помогите мне – Lee

+1

Пожалуйста, не защищайте ** значения, разделенные запятыми ** в одном столбце! Это беспорядок - и он вернется и преследует вас - скорее раньше, чем позже ..... если вам нужно несколько значений - поместите их в строки в отдельной связанной таблице - это реляционный способ сделать это! –

0

собственно и только реальный хорошо продуманный способ сделать это в реляционной настройке заключается в использовании отдельной таблицы для телефонов (это в конкретном синтаксисе SQL Server - это может немного отличаться, в зависимости на котором конкретная система базы данных вы используете):

Create table emp 
(
    id INT PRIMARY KEY, 
    name varchar(25) 
) 

create table phone 
(
    phoneId INT IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
    empid INT NOT NULL, 
    phone varchar(25) NOT NULL, 

    CONSTRAINT FK_Phone_Emp 
     FOREIGN KEY(empid) REFERENCES dbo.emp(id) 
); 

, а затем вставить данные сотрудника в emp:

insert into emp(id, name) 
values (1, lee); 

и телефонов в phone:

insert into phone(empid, phone) values(1, 23455); 
insert into phone(empid, phone) values(1, 67543); 

С помощью этой установки, у вас есть правильная нормировка для базы данных, и вы можете хранить стольких телефонов, как вам нравится, для каждого сотрудника.

+0

Не забывайте первичный ключ для таблицы emp, а не null для имен и столбцов phoneno. И объявление phoneid не соответствует ANSI SQL. (Нет указанных dbms.) Добавьте уникальное ограничение на (empid, phone). – jarlh

+0

@jarlh: извините, да, я использую синтаксис SQL Server здесь (потому что это то, что я использую каждый день и хорошо знаю). –

+0

Спасибо большое :) Я попробую это :) – Lee

Смежные вопросы