2012-02-29 2 views
1

Мне нужна помощь в написании этого прогресса запрос: найти первый не-замок где < аа = переменная и аб = variable2 и ас = variable3 и ((объявление> variable4 и п.в. <> variable5 и аф <> variable6) /* это «или» просто sudecode за то, что я хочу, чтобы это сделать */ или в (первой б не замком, где ба = переменная и (бб = variable7 или bb = переменная8 no-error))) no-error.`OpenEdge ABL/Progress 4GL Query

«У меня есть проблема».

+0

Вам нужно будет более точно описать, что вы подразумеваете под «или в». В любом случае вы пытаетесь найти первую таблицу в таблице «a» с предложением where, но я не получаю ссылку на таблицу «b». Что должно быть «в»? – LyrixDeRaven

+0

Я хочу проверить, есть ли переменная a.d <> ... ИЛИ есть элемент, возвращенный из второго оператора. – Bill

ответ

2

Учитывая вид заявления вы хотите создать, я предлагаю следующий двухэтапный процесс:

find first b no-lock where b.a = variable 
          and (b.b = variable7 or b.b = variable8) no-error. 

find first a no-lock where a.a = variable 
          and a.b = variable2 
          and a.c = variable3 
          and ((a.d <> variable4 and a.e <> variable5 and a.f <> variable6) 
           or available b) 
      no-error. 
+0

Я считаю, что вы найдете, что: где b.a = v1 и (b.b = v7 или b.b = v8) более эффективны, если они записаны как: где (b.a = v1 и b.b = v7) или (b.a = v1 и b.b = v8) –

0

Не думайте слишком много это как запрос MS SQL или общий запрос сценариев.

как для каждого теста1 без блокировки, где test1.a = var1 и test1.b = var2 no-error.

такой же, как найти первый тест1 без блокировки, где test1.a = var1 и (test1.b = var2 или test1.c = var3) no-error. // он дает вам только одну строку за раз.

0

Я считаю, что заявление, которое вы ищете, «может найти».

... or can-find(first b where b.a = a.a ...