2014-12-14 2 views
-1

Я новичок в SQL Server, поэтому прошу вас не обижаться на глупый вопрос.SQL Server full external объединяет несколько отключенных таблиц

У меня есть шесть несвязанных таблиц (таблица1, таблица2 (два столбца для запроса), table3, table4, table5, table6 (это дочерняя таблица таблицы 5)) в моей базе данных.

Это разнородные таблицы, и я хочу использовать один запрос для поиска данных из одного столбца в каждой таблице, а если он найден, то он заполняется в строках.

Я бегу следующий запрос

SELECT 
    table1.* 
    , table2.* 
    , table3.* 
    , table4.* 
    , table5.* 
    , table6.* 
FROM 
    dbo.table1 
FULL OUTER JOIN 
    dbo.table2 ON table1.col1 = table2.col_A OR table1.col1 = table2.col_B 
FULL OUTER JOIN 
    dbo.table3 ON table2.col_A = table3.col_F OR table2.col_B = table3.col_F 
FULL OUTER JOIN 
    dbo.table4 ON table3.col_F = table4.col_I 
FULL OUTER JOIN 
    dbo.table5 ON table4.col_I = table5.col_N 
INNER JOIN 
    dbo.table6 ON table5.col_N = table6.col_U OR table5.col_N = table6.col_V 
WHERE 
    table1.col1 LIKE '%' + USERINPUT + '%' 
    OR table2.col_A LIKE '%' + USERINPUT + '%' 
    OR table2.col_B LIKE '%' + USERINPUT + '%' 
    OR table3.col_F LIKE '%' + USERINPUT + '%' 
    OR table4.col_I LIKE '%' + USERINPUT + '%' 
    OR table5.col_N LIKE '%' + USERINPUT + '%' 

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

SELECT table1.* 
FROM dbo.table1 
WHERE 
     table1.col1 LIKE '%' + USERINPUT + '%' 

SELECT table5.* , table6.* 
FROM 
    dbo.table5 
INNER JOIN 
    dbo.table6 ON table5.col_N = table6.col_U OR table5.col_N = table6.col_V 
WHERE 
    table5.col_N LIKE '%' + USERINPUT + '%' 

Вся помощь признательна за решение проблемы. Короче хочется иметь один запрос, который проходит по всей таблице и выводит соответствующие строки ТОЛЬКО

+0

Почему последнее соединение является внутренним соединением? –

ответ

0

Я думаю, проблема в том, что вы используете full outer join, но для этого требуются совпадения.

Например, рассмотрите присоединиться к table4:

ON table3.col_F = table4.col_I 

Ну, чтобы получить какую-либо соответствующую строку из Table4, вы должны иметь не- NULL значения в table3.col_F. Но из-за full outer join, вероятно, будет много значений NULL. Это не совсем превращает структуру в inner join, но в итоге получается множество значений table4 в их собственной строке, при этом все остальные значения равны NULL.

Если вы действительно не знаете, что делаете, вам, вероятно, не нужны full outer join s. Иногда вы можете повторно разложить этот тип запроса как union all с агрегацией или просто использовать left join или inner join.

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