Хорошо, я считаю, что следующие два запроса достигают желаемых результатов. Вы можете увидеть весь пример кода с помощью следующей SQL Fiddle .
Правила существования :
select A.*
, B.Col3
, B.Col4
, B.Col5
from TableA A
JOIN TableB B
on A.Col1 = B.Col1
and A.Col2 = B.Col2
and B.Col5 = 2
where exists (select 1 from TableB C
where C.col1 = B.col1 and C.col2 = B.col2
and c.col4 = 'I' AND C.col5 = 1)
| Col1 | Col2 | Col3 | Col4 | Col5 |
|------|------|------|--------|------|
| 123 | 12 | AB | (null) | 2 |
| 123 | 12 | EF | (null) | 2 |
Правило исключения [ 1114]:
select A.*
, B.Col3
, B.Col4
, B.Col5
from TableA A
CROSS JOIN TableB B
where b.col5 = 2
and exists (select 1 from TableB C
where C.col1 = a.col1 and C.col2 = a.col2
and c.col4 = 'E' AND C.col5 = 1)
and b.col3 not in (select col3 from TableB b
where b.col1 = a.col1 and b.col2 = a.col2 and b.col5 = 2)
| Col1 | Col2 | Col3 | Col4 | Col5 |
|------|------|------|--------|------|
| 456 | 34 | AB | (null) | 2 |
| 456 | 34 | EF | (null) | 2 |
| 456 | 34 | GH | (null) | 2 |
| 456 | 34 | IJ | (null) | 2 |
Я знаю, что это не прямой ответ на Ваш вопрос, но похоже на сценарии чего-то сверху По необходимости в Perl? Раз так Вы могли бы найти, что существующая библиотека делает то, что Вы уже хотите и сохраняете себя много головных болей или по крайней мере даете Вам некоторый пример кода для работы от.
Например:
Править: Теперь, когда я знаю то, что Вы делаете, я предполагаю, что Вы пытаетесь портировать p42svn на Windows или скорее сделать его совместимым с Windows, по крайней мере. Посмотрите этот поток для обсуждения этой точной проблемы. (Непротестированная) рекомендация состоит в том, чтобы попробовать примеры кода, перечисленные по http://perldoc.perl.org/perlfork.html под "Разветвляющимся открытым каналом () еще не реализованный" для явного создания канала вместо этого.
Это не собирается работать как есть. Необходимо будет найти, что другой метод выполняет то, что он делает. Не похоже, что существует то, что, записывая потребность в канале ветвления, но трудно сказать, так как я не знаю то, что p4, и много Вашего кода теряется интерпретации угловой скобки.