Я пытаюсь объединить две таблицы, где значения из первой таблицы необходимо включить в значения в одном поле из второй таблицы, но исключить из значений в другом поле. Все поля не являются строками массива.
Например, у меня есть table1, который я хотел соединить с table2 при условиях, когда table1.field1 находится в table2.field1yes, но не в table2.field1no.
таблица1 имеет строки, которые должны объединяться со строками в таблице2 следующим образом:
- table1.field1 = '123100'
- table2.field1yes = '___ 100, ___ 200'
- table2.field2no = Null
- table1.field1 = '321300'
- table2.field1yes =%
- table2.field1no = '___100, ___ 200 '
Где _ обозначает подстановочный знак из одного символа, а% обозначает подстановочный знак из 0 или более символов
Записанный в коде, я попытался сделать следующее для объединения таблиц в приведенном выше примере:
WITH
table1 AS (SELECT '123100' field1 UNION ALL
SELECT '321300'),
table2 AS (SELECT 'data1' data, 'r\'^([\\d]+100|[\\d]+200)$\'' field1yes, '' field1no UNION ALL
SELECT 'data2', 'r\'^([0-9A-Za-z])$\'', 'r\'^([\\d]+100|[\\d]+200)$\'')
SELECT
*
FROM table1
JOIN table2
ON 0=0
AND REGEXP_CONTAINS(table1.field1, table2.field1yes)
AND NOT REGEXP_CONTAINS(table1.field1, table2.field1no)
Но это не возвращает результатов, даже если следующее возвращает первую строку из таблицы1 как ожидаемый результат:
SELECT
*
FROM table1
WHERE 0=0
AND REGEXP_CONTAINS(table1.field1, r'^([\d]+100|[\d]+200)$')
и следующее возвращает вторую строку из таблицы1:
SELECT
*
FROM table1
WHERE 0=0
AND NOT REGEXP_CONTAINS(table1.field1, r'^([\d]+100|[\d]+200)$')
Это т легкий подход? Если да, какие настройки мне нужно внести в мой запрос, чтобы получить результаты? Если нет, есть ли другое решение для сопоставления этих двух таблиц?