2014-11-16 4 views
0

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

Original Main Table 
--Name---------Number------Due Date-------Location-------Charges Monthly-----Charges Total-- 
John Smith  111-1111  4/3   Chicago   234.56    500.23 
Todd Jones  222-2222  4/3   New York  174.34    323.56 
John Smith  111-1111  4/3   Chicago   274.56    670.23 
Bill James  333-3333  4/3   Orlando   100.00    100.00 

Это разбивается на 3 таблицы (имя, номер, место нахождения), а затем есть дата таблица со всеми датами за год:

Name Table    Number Table   Location Table  Due Date Table 
--ID---Name------   -ID--Number---------  ---ID---Location---- --Date--- 
    1 John Smith   1 111-1111     1 Chicago   4/1 
    2 Todd Jones   2 222-2222     2 New York   4/2 
    3 Bill James   3 333-3333     3 Orlando   4/3 

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

 Select Output 
--Name ID----Number ID---Location ID---Due Date-- 
    1   1    1   4/3 
    2   2    2   4/3 
    1   1    1   4/3 
    3   3    3   4/3 

Моя проблема возникает, когда мне нужно ввести новую таблицу, которая не в состоянии быть привязаны к Изначальной главной таблице. У меня есть таблица инвентаря, которая, как и оригинальная таблица Main, имеет дубликаты и нуждается в оптимизации. Я делаю это, создавая вторичную таблицу, которая выводит все дублированные устройства и помещает их в свою таблицу, а затем удаляет имя пользователя и номер и помещает их в свои таблицы. Я хотел бы добавить идентификаторы из этой новой таблицы устройств в выбранный вывод, который у меня выше. Результирующая в:

 Select Output 
--Name ID----Number ID---Location ID---Due Date--Device ID--- 
    1   1    1   4/3  1 
    2   2    2   4/3  1 
    1   1    1   4/3  2 
    3   3    3   4/3  1 

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

+0

Это поможет, если вы сможете сузить свой вопрос (это похоже на спецификацию разработки проекта). Если вы хотите удалить дубликаты из таблицы, есть возможность использовать SELECT DISTINCT в запросе, что может помочь. С уважением, –

+0

Проблема заключается в том, что я не могу присоединиться к таблице устройств с запросом select, который выводит остальные идентификаторы, потому что нет связи между устройством и исходной таблицей «main». –

+0

Как я уже говорил, сузите сферу вашего вопроса: эта проблема вызвана удалением дубликатов, или есть другой, независимо от дубликатов (например, добавление внешних ключей в отношение таблиц и т. Д.)? Спасибо и приветствую, –

ответ

0

Любые две таблицы могут быть объединены. Таблица представляет собой связь приложения. В некоторых версиях (а не в оригинале) моделирования Entity-Relationship (обратите внимание, что «R» в E-R означает «отношение приложения»!), Внешний ключ иногда называют «отношением». Вам не нужны другие таблицы или FK для объединения любых двух таблиц.

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

SELECT * 
FROM the stripped-and-ID'd version of the Original AS o 
JOIN the stripped-and-ID'd version of the Device AS d 
USING NameID, NumberID, LocationID and DueDate 

Т.е

SELECT * 
FROM the stripped-and-ID'd version of the Original AS o 
JOIN the stripped-and-ID'd version of the Device AS d 
ON o.NameID=d.NameId AND o.NumberID=d.NumberID 
    AND o.LocationID=d.LocationID AND o.DueDateID=d.DueDate. 

Пусть р ( ...) представляет собой некоторую инструкцию, параметризованную a, ....

Если o содержит строки, в которых o (NameID, NumberID, LocationID, DueDate), а d содержит строки, где d (NameID, NumberID, LocationID, DueDate, DeviceID), то вышеуказанное содержит строки, где o (NameID, NumberID , LocationID, DueDate) И d (NameID, NumberID, LocationID, DueDate, DeviceID). Но вы действительно не объяснили, какие строки вы хотите.

+0

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

+0

Я действительно не могу понять его вопрос. Я согласен, что он «добавляет» (объединение) где-то там. Я думаю, что ОП четко * не понимает ПРИСОЕДИНЯЮТСЯ. Никто не присоединяется к (или к) отношениям (независимо от того, что это означает); можно присоединить к условию. «Я хотел бы добавить идентификаторы из этой новой таблицы устройств в выходной файл select, который у меня выше», и следующий пример предлагает присоединиться к моему ответу. Но, вероятно, существуют дополнительные ограничения («отношения»), таблицы и/или условия. – philipxy

0

Единственный способ «присоединиться» таблицы, которые не имеют никакого отношения является unioning их вместе:

select attribute1, attribute2, ... , attributeN 
from table1 
where <predicate> 
union  // or union all 
select attribute1, attribute2, ... , attributeN 
from table2 
where <predicate> 

в котором положения, очевидно, необязательно

EDIT

необязательно вы могли бы присоединиться таблицы вместе, указывая ON true, который будет действовать как перекрестный продукт

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