2016-03-16 1 views
0

Я хочу добавить новые строки в таблицу-1 d:\dl на основе ограничения равенства lower(rdl.subdir) = lower(tr.n1), где rdl и tr будут предполагаемыми псевдонимами для f:\rdl и f:\tr таблиц соответственно. я получаю function name is missing). сообщений при выполнении следующей команды в VFP9:Вставка новых строк в таблицу-1 на основе ограничений, определенных в таблице-2 и таблице-3

INSERT INTO d:\dl SELECT * FROM f:\rdl WHERE (select LOWER(subdir)FROM f:\rdl in (select LOWER(n1) FROM f:\tr)) 

Я использую синтаксис in, вместо утверждения равенства псевдонима на основе lower(rdl.subdir) = lower(tr.n1), потому что я не знаю, где для определения псевдонимов в рамках этой команды.

ответ

2

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

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

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

Вы тоже слишком много работаете. Попробуйте следующее:

INSERT INTO d:\dl ; 
    SELECT * ; 
    FROM f:\rdl ; 
     JOIN f:\tr ; 
     ON LOWER(rdl.subdir) = LOWER(tr.n1) 
+0

Извините, я редактировал оригинальный код для удобочитаемости, поэтому мой точный код находится только на одной строке. Я хочу использовать псевдонимы, потому что имена реальных таблиц очень длинные. – sda

+0

Я до сих пор получаю свое первоначальное сообщение об ошибке после отправки частичного запроса, начиная с оператора 'select' в командной строке VFP9 (VCP). Возможно или необходимо использовать синтаксис ';' на VCP? – sda

+1

Можно использовать; в командной строке. Просто используйте Ctrl + enter после; вместо входа. Это не обязательно, но повышает читаемость вашего кода. Также вместо того, чтобы писать как f: \ rdl, напишите его как ("f: \ rdl"). –