Запрос в Access - PullRequest
       37

Запрос в Access

1 голос
/ 17 февраля 2009

У меня есть 2 таблицы, которые я хотел бы запросить, чтобы сформировать новую таблицу.

Таблица 1

 number    type serial index
1000001     613      3     1
1000001     613      3     1
1000001     613      3     1
1000001     613      3     1
1000001     613      4     1
1000001     613      3     1

Таблица 2

 number    type serial index
1000001     613      3     2
1000001     613      3     3
1000001     613      3     4
1000001     613      3     4
1000001     613      4     2
1000001     613      3     1

Я ищу запрос, который дает результат индексов и чисел, подобных этому, и добавляет индекс, и дает результат:

output table

 number  index
1000001      3
1000001      4 
1000001      5 
1000001      5 
1000001      3
1000001      2 

Я хочу предотвратить перекрестные соединения здесь. Я не могу использовать предложение where, потому что числа одинаковы в обеих таблицах, меняется только индекс. Как я могу выполнить это один-к-одному, а не один-ко-многим.

Ответы [ 3 ]

1 голос
/ 17 февраля 2009

Исходя из моего понимания проблемы, вы хотите добавить столбец индекса в эквивалентные строки в каждой таблице. Так как MS Access не имеет функции нумерации строк, как серверы баз данных, я могу временно добавить новое поле автонумерации для каждой таблицы. Это даст вам что-то для внутреннего соединения, а затем добавит.

Допустим, вы вызываете этот столбец tempAuto для обеих таблиц.

SELECT t1.number, (t1.index + t2.index) AS index 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.tempAuto = t2.tempAuto;

После этого вы можете удалить дополнительные столбцы после выполнения любых манипуляций с данными.

1 голос
/ 17 февраля 2009

Я не думаю, что возможно сделать то, что вы просите. Вы должны были бы иметь возможность различать каждую строку уникальным образом, чтобы гарантировать результат 1: 1 (обычно это работа столбца индекса или столбца идентификатора).

Возможно, вам удастся что-то сделать с помощью rownum, но если таблицы упорядочены одинаково, то, возможно, вы чрезмерно нормализованы. Таблицы 1 и 2 действительно должны быть только одним, и у вас есть две колонки индекса (index1 и index2) в одной таблице.

0 голосов
/ 17 февраля 2009

Вам нужно знать, как настроить эту функцию счетчика, Qcntr (): (См. http://support.microsoft.com/kb/94397)

Select Counter, number, Max(index) + 1 as new_Index
From
(
  (Select Number, index, Qcntr(number) as Counter from [Table 1])
   Union
  (Select Number, index, Qcntr(number) as Counter from [Table 2])
) as both_tables
Group by Counter, number

Вы можете добавить это к вашей выходной таблице без поля Counter.

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