2015-06-18 6 views
-4

Можно выполнять регистрации в пути, как это (например, в MS SQL.):Регистрация без specyfing первичного и внешнего ключа

select p.* from Person p join Order o 

По умолчанию двигатель DB может выглядеть для любого соотношения между этой таблицы и использования без письменного разрешения:

on p.ID = o.FK_Person 
+0

Не уверен, что вы просите. Когда вы присоединяетесь, вы должны присоединиться к таблицам в каком-либо поле. Не обязательно быть PK или FK, но будет большую часть времени. –

+0

Я имею в виду - все время я пишу похожие запросы. В программировании у вас есть так много вещей, которые позволяют вам писать меньше - и здесь вы обычно присоединяетесь к PK и FK, поэтому почему бы не использовать PK и FK, если ничего не указано/ – Pavel

+3

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

ответ

0

НЕТ Вам не нужно указывать предложение о соединении двумя способами.

неявной присоединиться обозначения:

SELECT p.* 
FROM Person p, Order o 
WHERE p.ID = o.FK_Person 

Или Явные обозначения:

SELECT p.* 
FROM Person p 
INNER JOIN Order o 
     ON p.ID = o.FK_Person 

Если вы не указать любой порядок соединения, сервер не присоединится ничего. Он определен в стандарте SQL.

+1

С технической точки зрения то, что вы называете неявным соединением, является перекрестным соединением. Причина, по которой она работает, связана с предикатом. –

+0

@SeanLange Условие делает его внутренним соединением. Посмотрите это сообщение, например: http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins –

+0

@SeanLange каждое соединение в первом случае является декартовым продуктом (перекрестное соединение для вас). После этого применяется фильтр (внутреннее соединение), и, возможно, сохраненные внешние строки будут прикреплены назад (слева, справа, полное соединение, например). Оптимизатор плана в SQL Server выполнит оба запроса полностью одинаковыми. Просто обозначение - это различие. – Ionic

0

Да ,, возможно при использовании нон ANSI соединяет разделенные seprated как

select p.* from Person p , Order o

предупреждений: результат будет декартово произведение двух таблиц .ANSI соединения не возможно.

Thanks

+0

Это крест. –

+0

Ну это будет, да, но это будет декартовое соединение, как вы уже сказали, а не настоящее соединение. Это приведет к большим накладным расходам. :-D – Ionic

+0

@SeanLange он уже заявил, что он является декартовым продуктом в своем оригинальном посте. Декартовым продуктом является крестообразное соединение. ;-) – Ionic

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