0 / 0 / 0
Регистрация: 13.04.2015
Сообщений: 6
1

Связь 1 к 1, как это сделать в запросе SQL

27.09.2015, 20:03. Показов 43113. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, нужно создать связь в SQL 1 к 1, но ничего не выходит, а 1 ко многим не подходит в данном случае. Слышал про уникальный индекс, но прогресса это мне не дает.
Связь 1 к 1 по 2-м таблицам, в каждой есть столбец Applicant_id, и его нужно связать. Как это сделать? Просьба в виде кода для запроса
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2015, 20:03
Ответы с готовыми решениями:

Почему в выходном SQL запросе двойные кавычки в тексте и как это исправить?
Чо за беда такая? если пишу в коде $query2 =...

Как это сделать? Как объединить более одной таблицы в одном запросе?
Как это сделать? Как объединить более одной таблицы в одном запросе? Есть три таблицы: Табл1...

как лучше сделать это подключение в sql
Ситуевина такова, 1. есть сайт - интернет магазин(висит на выделенном сервере) 2. есть программа...

Как в SQL запросе сделать выбор даты по конкретному месяцу и дню и для любого года?
Как в эскюэльном запросе сделать выбор даты по конкретному месяцу и дню и для любого года??? ...

9
1652 / 1151 / 173
Регистрация: 23.07.2010
Сообщений: 6,843
28.09.2015, 08:41 2
что значит 1-1? и зачем 2 таблицы в таком случае?
0
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
28.09.2015, 20:40 3
Лучший ответ Сообщение было отмечено Metall_Version как решение

Решение

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

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE A1
( 
  id1 int PRIMARY KEY,
  value1 nvarchar(50) NOT NULL
)
GO
 
CREATE TABLE A2
( 
  id2 int PRIMARY KEY,
  value2 nvarchar(50) NOT NULL
)
GO
 
ALTER TABLE A2
  ADD FOREIGN KEY (id2) REFERENCES A1(id1)
  ON DELETE CASCADE 
GO
вот пример,

важно понимать что мы не сможем создать запись в таблице А2 если такого значения id2 нету в таблице А1 в поле id1

но можем создать запись в таблице А1 если такого значения id1 нету в таблице А2 в поле id2

то есть таблица А1 является первичной в связи
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,563
29.09.2015, 21:57 4
Цитата Сообщение от Metall_Version Посмотреть сообщение
с разницей в том что первичный и внешний ключ в обоих таблицах должен быть первичным ключом
Это когда связь один к одному, Да
Цитата Сообщение от Metall_Version Посмотреть сообщение
(или уникальным)
Но если у меня связь один ко многих и каскадное удаление , вот так
T-SQL
1
2
3
4
5
6
7
8
9
10
11
Create table Tab1(id int identity(1,1),
                  name nvarchar(40) 
                  constraint PK_Tab1 primary key(id)
                  );
--------------------
Create table Tab2(id int identity(1,1) primary key,
                  Proizvoditel nvarchar(40),
                  Tab1ID int
                  constraint Tab2_FK foreign key(Tab1ID)
                  references Tab1(id) on delete cascade
                  )
У меня внешний ключ не уникальны да ? в этом случае я что то нарушаю ? думаю что нечего
0
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
29.09.2015, 22:52 5
Цитата Сообщение от xxbesoxx Посмотреть сообщение
Это когда связь один к одному
конечно, именно это мы и обсуждаем в теме

Цитата Сообщение от xxbesoxx Посмотреть сообщение
У меня внешний ключ не уникальны да ?
вы не поверите но это единственный способ создать связь 1 ко многим

но только у вас вязь 1 к 1 всеже . так как внешний ключ уникальный
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,563
30.09.2015, 07:51 6
Цитата Сообщение от Metall_Version Посмотреть сообщение
но только у вас вязь 1 к 1 всеже .
Не, смотрите пожалуйста . на пример Tab1 Я храню наименование что то
T-SQL
1
2
3
insert into Tab1(name) values(N'Чай') 
--------------------------
select * from Tab1
И этот чай из разные страны
T-SQL
1
2
3
4
insert into Tab2(Proizvoditel, Tab1ID) values (N'Русский',1),
                                              (N'Украинский',1),
                                              (N'Китайский',1),
                                              (N'Китайский',1)
А select-е я выбираю нужны товар и попадает все чай
T-SQL
1
2
3
4
select name, Proizvoditel
from Tab1 inner join Tab2
on  Tab1.id=Tab2.Tab1ID
where name=N'Чай'
У меня связь один ко многим
Изображения
 
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,563
30.09.2015, 08:36 7
У вас да на #3 один к одному и все правильно работает

T-SQL
1
2
3
insert into A1(id1, value1) values(1, N'Чай') 
select * from A1
insert into A2(id2, value2) values(1, N'Чай')
У меня на #4 один ко многим
Для KonstantinRPVL добавлю силку что он уловил http://www.online-academy.ru/d... /teor4.htm
0
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
30.09.2015, 08:58 8
xxbesoxx, ага действительно я не заметил что внешний ключ не id а Tab1ID, не уникальный, соответсвенно это 1 ко многим
0
Эксперт Pascal/Delphi
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,563
30.09.2015, 09:04 9
Да нечего , все нормально удачного вам дня
0
0 / 0 / 0
Регистрация: 13.04.2015
Сообщений: 6
30.09.2015, 17:00  [ТС] 10
Всем большое спасибо, очень помогли!
0
30.09.2015, 17:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2015, 17:00
Помогаю со студенческими работами здесь

Азы SQL, модуль и макрос. Как это сделать
Перечитал по Access все начальные учебники и TeachPro видео, но нигде так и не нашел, с чего эе...

Выполение SQL в VB, не знаю как это сделать, подскажите
Вообщем мне нужно что бы перед открытием формы, выполнилась очистка некой таблицы, занесены туда...

Нужно к одной странице прикрепить базу sql вопрос как это сделать
есть страница товаров в наличии к ней есть база вот ее нужно как-то внедрить в джумлу


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru