2014-11-05 2 views
0

Я подумываю переключиться на использование временных таблиц и vba.MS Access SQL Неравное соединение для 3 или более таблиц

Я хочу это сделать. У меня несколько таблиц, в этих таблицах могут быть или не быть поля с элементами, которые имеют отношение от одного до многих или от одного к одному. Я знаю, каковы эти отношения (и будет создавать несколько запросов соответственно). То, что я ищу, - это значение, которое НЕ СУЩЕСТВУЕТ в каждой другой таблице. Например:

Скажем, у нас есть 3 таблицы столбцов, таблица 1 - {x, y, z}, таблица 2 - {a, x, z}, а таблица 3 - {a, b, x, y, z}, результат будет b для t3 (да, я должен знать, где ошибка). В основном, я хочу использовать неравный мастер, но для 3 или более таблиц.

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

+0

Добро пожаловать в переполнение стека! В общем, здесь согласен, что [вы не должны использовать приветствия или приветствия в своих сообщениях] (http://meta.stackoverflow.com/questions/276033/pointless-question-edit/276037#276037). Они мешают нам, читающим вопрос. На этот раз я отредактировал их для вас. –

+0

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

ответ

0

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

Есть всего 3 запросов:

qry_001_TableValues_ALL

SELECT Table1.MyValue, "Table1" AS Source 
FROM Table1 

UNION 

SELECT Table2.MyValue, "Table2" AS Source 
FROM Table2 

UNION SELECT Table3.MyValue, "Table3" AS Source 
FROM Table3; 

qry_002_TableValues_Unique:

SELECT qry_001_TableValues_ALL.MyValue 
FROM qry_001_TableValues_ALL 
GROUP BY qry_001_TableValues_ALL.MyValue 
HAVING (((Count(qry_001_TableValues_ALL.MyValue))=1)); 

qry_003_TableValues_UniqueWithSource:

SELECT qry_002_TableValues_Unique.MyValue, qry_001_TableValues_ALL.Source 
FROM qry_002_TableValues_Unique INNER JOIN qry_001_TableValues_ALL 
     ON qry_002_TableValues_Unique.MyValue = qry_001_TableValues_ALL.MyValue; 

Первая таблица - это та, которая вам понадобится для создания скрипта, если будут изменены таблицы \ таблицы. Он просматривает все таблицы и создает уникальный список значений из указанного поля. Во втором запросе выполняется поиск имени исходной таблицы по первому уникальному запросу для всех значений, которые имеют счет 1, пост-агрегацию. Это означает, что все задействованные таблицы содержат только один экземпляр возвращаемых значений, и он снова объединяется с первоначальным уникальным списком значений, чтобы определить, что такое исходная таблица. Вы можете скопировать изменение в предложение HAVING здесь, чтобы увидеть, есть ли таблицы x, которые содержат это значение. Конечный запрос - это просто тот, который вы запускаете, чтобы дать вам окончательный отчет о тех значениях, которые вы ищете и где они находятся.

Надеюсь, что это в шаге от того, что вы пытаетесь сделать.

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