Соедините две таблицы без ссылки - т.е. первичный ключ в SQL Server Management Studio - PullRequest
0 голосов
/ 27 мая 2011

Я хотел бы знать, как запросить две таблицы без ссылки на первичный ключ.Таблицы взяты из одной базы данных, и мне нужно сопоставить treenotediscription и employeeid, чтобы результаты вернулись в тот момент, когда я получаю много дублирующих и неверных значений, я думаю, что это из-за отсутствия ссылки.Любая помощь будет оценена.

SELECT DISTINCT 
    EMPLOYEE.EMPLOYEECODE, 
    TREENODEDESCRIPTION.TREENODEDESCRIPTION2
FROM         
    EMPLOYEE 
CROSS JOIN
    TREENODEDESCRIPTION
ORDER BY 
    EMPLOYEE.EMPLOYEECODE

Ответы [ 4 ]

1 голос
/ 27 мая 2011

В CROSS JOIN каждая отдельная запись в одной таблице объединяется с каждой отдельной записью в другой таблице. Если в каждой таблице 10 записей, это дает 100 совпадений.

Более распространенным объединением является INNER JOIN ...

SELECT DISTINCT
  employee.EmployeeCode,
  TreeNodeDescription.TreeNodeDescription2
FROM
  Employee
INNER JOIN
  TreeNodeDescription
    ON Employee.EmployeeID = TreeNodeDescription.TreeNodeDescription2

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

1 голос
/ 27 мая 2011

То, что вы получаете, это декартово соединение, возвращающее все строки.Независимо от первичных или внешних ключей, вам необходимо указать, к каким столбцам нужно присоединиться.

Дополнительную информацию о объединениях можно найти в этой статье:

http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx

0 голосов
/ 27 мая 2011

Просто ПРИСОЕДИНЯЙТЕСЬ к общему полю - никакие ФК или другие отношения не нужны !!

SELECT DISTINCT 
     e.EmployeeCode,
     t.TreeNodeDescription2
FROM         
    dbo.Employee e
INNER JOIN
    dbo.TreeNodeDescription t ON e.EmployeeID = t.TreeNodeScription
ORDER BY 
    e.EmployeeCode
0 голосов
/ 27 мая 2011

Во-первых, нет необходимости иметь реляционную ссылку на столбцы для выполнения объединения. Соединения основаны на булевых условиях. Если логическое условие истинно, тогда происходит соединение.

Тем не менее, я подозреваю, что ваша настоящая проблема здесь в том, какой тип соединения вы используете. CROSS JOIN присоединится к каждому матчу с обеих сторон против любого другого матча. В зависимости от того, что вам нужно, вам, скорее всего, понадобится ВНУТРЕННЕЕ или ЛЕВОЕ соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...