2016-01-08 2 views
-2

таблицы А = Четкость (стоимость создания эксклюзивной J = CaseID; содержит ДНС)Регистрация 3 таблицы в 1 новой таблице

Таблицы B = обследования (уникальный идентификатор = ДНС)

таблицу C = QA (уникальный идентификатор = caseID ; содержит ДНС)

В таблице D = FullData

Цель:

«внесенный» содержит:

все «TableC»,

все «TableA», для которого существует «CaseID» и «ДНС» совместно с «таблицы C»

все «TableB», для которого существует « CSN "совместно с" Таблица C "

Стол переделан каждый вечер. Есть много людей, которые будут проводить исследования запросов в «Таблице D.» Я думаю, что это должна быть таблица, а не представление.

Я собирался использовать:

Create TableD AS  
    Select *  
    From TableC  
    Left Join TableA  
     ON TableA.CaseID = TableC.CaseID AND TableA.CSN = TableC.CSN  
    Left Join TableB  
     ON TableC.CSN = TableC.CSN 

Я собирался использовать SQL Agent, чтобы сценарий запуска каждую ночь. Это кажется слишком простым. Должен ли я отказаться от стола, который был сделан накануне? Кто-нибудь видит ошибку? Я использую Microsoft SQL Server.

+0

Вы отметили свой вопрос как с mysql, так и с sql-сервером. Что он? –

+1

Должно быть вид – techspider

+0

У вас есть ошибка при запуске? Если вы запрашиваете обзор кода, для этого есть другой сайт обмена стеками: http://codereview.stackexchange.com/ –

ответ

0

Я предполагаю, что у вас есть база данных SQL Server.

Подход к таблице может иметь преимущество, потому что вы сказали, что многие люди будут использовать его для целей исследования/отчета. Вы не хотите увязывать свои основные таблицы приложений из-за многих запросов запросов для отчетов/исследований. Лучше всего иметь отдельную таблицу отчетов, чтобы на ваши основные таблицы приложений не влиял дополнительный трафик для целей отчетности/исследования.

Если вы хотите использовать табличный подход, можно использовать следующий скрипт. Я бы рекомендовал не использовать * в SELECT *, так как есть дубликаты столбцов по таблицам, которые вы используете как CaseID и CSN; вместо этого укажите список столбцов, который вы хотите использовать в вашем tableD.

IF Object_id(N'TableD', N'U') IS NULL 
BEGIN 
    SELECT * 
    INTO  tabled 
    FROM  tablec 
    LEFT JOIN tablea 
    ON  tablea.caseid = tablec.caseid 
    AND  tablea.csn = tablec.csn 
    LEFT JOIN tableb 
    ON  tablec.csn = tablec.csn; 

END 
ELSE 
BEGIN 
    DELETE 
    FROM tabled;  
    INSERT INTO tabled 
    SELECT * 
    FROM  tablec 
    LEFT JOIN tablea 
    ON  tablea.caseid = tablec.caseid 
    AND  tablea.csn = tablec.csn 
    LEFT JOIN tableb 
    ON  tablec.csn = tablec.csn; 

END 
+0

Thanks Sunil Я исправлю, что вы написали выше, как вы сделали это, чтобы он мог выполнить первый раз без создания таблицы? Я знаю, что обычно мне нужно было бы создать таблицу, прежде чем я сначала запустил скрипт. по-моему, во второй части, я заменил бы * именами столбцов, чтобы сделать их краткими. Они объясняют это тем, что не будут иметь дублирующих столбцов CSN и CaseID. Правильно? – JoshuaB

+0

@ Joshua, приветствую вас. ваши вопросы. Вы можете просто включить этот сценарий создания автоматической таблицы, не создавая новую таблицу. Кроме того, '*' в CREATE TABLE, а также INSERT .. SELECT должен быть заменен на тот же список имен столбцов 'убедившись, что du столбцы столбцов CSN и CaseID не повторяются. – Sunil