2014-11-16 7 views
0

Я столкнулся с довольно странной проблемой с запросом select. Сначала позвольте мне объяснить мою настройку. У меня есть 5 таблиц: таблица имен пользователей, телефонная таблица, таблица дат, таблица ссылок и таблица данных.Проблемы с выбором запроса в доступе

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

---UserName---ID--- ---Phone-----ID----  ---Date---  ---rate---charges---Phone-----Date--- 
| Bill Jones 1 | | 123-4567 1 |  | 1/1 | | 1.24  10  123-4567 1/1 
| Mike Jones 2 | | 456-7895 2 |  | 1/2 | | 1.00  5  456-7895 1/1 
                   | 4.56  20  123-4567 1/1 
                   | 5.34  4  123-4567 1/1 

И таблица Linking выглядит следующим образом:

 ---User ID---Phone ID---Date---- 
      1   1   1/1 
      2   2   1/1 
      1   1   1/1 
      1   1   1/1 

Сейчас в Access, при запуске запроса на выборку по имени пользователя, номер телефона, дату и данных, я получаю настройку, в которой пользователь, телефон и таблица даты присоединяются к таблице ссылок, в то время как таблица телефона и таблица дат также объединяются с таблицей данных. он присоединяется к вещам соответственно и почти отлично работает, за исключением того, что я заметил, что не все данные фактически выбираются. В реальной таблице у меня есть 495 записей, но когда я запускаю запрос select, только 417 можно перетащить. Есть ли какой-либо параметр или что-то в Access, которое мне нужно изменить? почему бы только некоторые из записей были выбраны? Это более чем вероятно ошибка в кодировании, где еще? Я заметил, что если бы я только что сделал select all таблицы данных, он вытащил более 495 записей, но как только я начну присоединяться к другим столам, это испортится.

Здесь оператор выбора:

SELECT DATA.[Charges], DATA.[Rate], Date.[ Date], Phone_Master.[ Phone], User_Master.[User Name] 
FROM User_Master 
    INNER JOIN ((Phone_Master 
    INNER JOIN DATA 
    ON Phone_Master.[Phone] = Data.[Phone]) 
    INNER JOIN (Date 
    INNER JOIN Link_table 
    ON Date.[date] = Link.[date]) 
    ON (Date.[date] = DATA.[date]) AND (Phone_Master.ID = Link.[Phone ID])) 
    ON User_Master.ID = Link.[Username ID]; 

Это точная настройка, что MS-Access, созданный для меня после того, как я получил сделали присоединение вещи с точки зрения дизайна. Я просто изменил некоторые имена, чтобы соответствовать моему предыдущему примеру.

+0

Можете ли вы предоставить инструкцию select? Очевидно, что ваши объединения ограничивают некоторые значения. Вы можете использовать выражение 'OUTER JOIN'. –

+0

Дайте мне одну секунду, и я обновлю исходное сообщение с помощью оператора select – Jcmoney1010

+0

@MladenUzelac добавлено обновление – Jcmoney1010

ответ

0

У вас нет действующей модели данных. Ваша таблица данных должна быть связана с другими таблицами с идентификаторами, а не с телефоном. И я полагаю, из-за этого ваш запрос так странно сгенерирован (A join in join).

И почему у вас есть дубликаты в таблице ссылок?
Именование таблиц с пробелами - плохая практика.

Это отредактированный SQL-запрос:

SELECT DATA.[Charges], DATA.[Rate], Date.[ Date], Phone_Master.[ Phone], User_Master.[User Name] 
    FROM User_Master 
    INNER JOIN ((Phone_Master INNER JOIN DATA ON Phone_Master.[Phone] = Data.[Phone]) 
      INNER JOIN (Date INNER JOIN Link_table ON Date.[date] = Link.[date]) 
       ON (Date.[date] = DATA.[date]) AND (Phone_Master.ID = Link.[Phone ID])) 
    ON User_Master.ID = Link.[Username ID]; 

Я надеюсь, что вы видите большой беспорядок здесь.

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