2016-12-02 2 views
0

Я использую ADO для запроса объекта из базы данных (excel file, accdb, mdb ...) Что меня пугает сейчас: возможно ли выбрать таблицу/БД с настройкой состояния внутри SQL? обычно:Можете ли вы выбрать данные из таблицы/базы данных с условием?

SELECT Field1 FROM table1 

что я ожидаю:

if A=2 then SELECT F1 FROM table1 else SELECT F1 from table2 

Или так:

SELECT F1 from switch(A=2, table1, true, Table2) 

Я могу это сделать в VB путем создания SQL строки из условия, но я не знаете, может ли это сделать какой-либо собственный SQL-оператор? (таблица переключателей/ExternalDB для выбора)

+0

Да, вы можете это сделать, но это в основном по линии того же самого с vb. Вы можете создать динамический sql. –

+0

Это лучше сделать в vb/C#, чем в SQL. Создайте SQL на основе переменной, а затем выполните – GurV

+0

Спасибо, парень, строка SQL слишком ez. Я просто хочу посмотреть, есть ли способ использовать собственный SQL (но не снизить производительность в целом). – Sum

ответ

0

Вы можете сделать это в динамическом SQL проще всего. То есть, постройте запрос, который вы хотите.

В противном случае, вы можете сделать:

SELECT F1 
FROM table1 
WHERE "A" = 2 
UNION ALL 
SELECT F1 
FROM table2 
WHERE "A" <> 2; 

То есть, UNION ALL сочетает в себе две возможности. "A" представляет собой факт, что A является переменной. Точный синтаксис зависит от базы данных и механизма доступа.

+0

таким образом, я думаю, что общая производительность значительно снизится, если в таблице1 и таблице2 будет много данных (более 1 м строк). в конце концов, вы показали мне, что это возможно ... Спасибо Гордону. просто, если есть более двух таблиц, динамическое число таблиц, это будет сложнее, чем сама проблема. Lol – Sum

+0

@Sum. , , Независимо от того, запрашивает ли запрос любые данные из таблиц, когда константное условие ложно, зависит от оптимизатора базы данных. Большинство оптимизаторов вернут пустой набор результатов очень быстро. –

+0

проблема в том, что есть три таблицы одинакового формата, каждое содержимое таблицы определяет месяц (tbl1 1-> 4, tbl2 5-> 9, tbl3 10-> 12). если мне нужно только запрашивать данные из любого месяца (от 1 до 12), тогда я должен запросить у UNION ALL (tbl1 + tbl2 + tbl3) <--- этот процесс замедления. Поэтому я пытаюсь найти трюк, который делает компьютер достаточно умным, чтобы загрузить только необходимую таблицу (поскольку каждое содержимое таблицы превышает 1 м записей). – Sum

0

если вы используете VB, то:

sql = "select f1 from " & if(A=2,"table1", "table2") 

Вы можете сделать это в основном на любом языке.

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