2016-11-15 6 views
0

В MS Access, нужно выбрать одну строку с большим количеством данных из разных таблиц с этим запросом:MS Access: Как я могу выбрать столбцы из разных таблиц

select top 1 a.colname,b.colname,c.colname 
from tba a, tbb b, tbc c 
where a.colname = 'efg' or 
     b.colname ='efg' or 
     c.colname ='efg' 

я получить данные прекрасно, когда " efg ' соответствует по крайней мере 1 из 3 таблиц, но если он не соответствует ни одному из них, я получу MS Access, замороженный с помощью курсора ожидания. Я догадался, что по какой-то причине это зацикливается. Я могу остановить его с помощью END TASK в диспетчере задач Windows.

Как мой запрос и может ли любой эксперт объяснить или предложить различные методы, чтобы избежать этого?

спасибо.

+0

Насколько велики каждая из трех таблиц? –

+0

avg рекорд около 5000, не так большой. – Jackth

+0

Вы используете не объединенные таблицы, это означает, что если у вас есть 5000 записей в каждой таблице, выбор может возвращать 5000 * 5000 * 5000 = 125 000 000 000 строк, конечно, доступ будет зависать, и даже операционная система может потерпеть крах. Сначала соедините таблицы. –

ответ

0

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

select top 1 d.* 
FROM (  SELECT a.colname as colName 
      FROM tba a 
      WHERE a.colname = 'efg' 
     UNION ALL 
      SELECT b.colnamee as colName  
      FROM tbb b 
      WHERE B.colName='efg' 
     UNION ALL 
      SELECT c.colname as colName  
      FROM tbc c 
      WHERE c.colName='efg' 
    ) as d 

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

+0

большое спасибо ClintB. Похоже, это моя плохая идея получить данные о результатах. – Jackth