Я пишу запрос, который объединяет столбцы из двух разных таблиц. В настоящее время я читаю данные из файла CSV и выполняю сверку данных. Поля следующие: Назовем обе таблицы Кредиторами и Takers. БД кредиторов имеет кредитное имя Trade_Acct_Number, два разных идентификатора, называемых trade_ID и action_ID. С другой стороны, таблица получателей имеет соответствующий Trading_Account_Num, и это два разных идентификатора trade_ID и action_ID.Проблема с Inner и Left Join
Вот условия; записи должны быть сопоставлены главным образом на Trading_Acct_Numbers. Затем, основываясь на trade_Account_Num, мы далее фильтруем данные на основе trade_ID и action_ID. Trade_ID - 8 символов; Если на последних 6 символах trade_ID есть совпадение, мы отражаем эти данные; иначе мы проверим action_ID.
Вот мой текущий запрос (Написанный в SQL CE сервера)
SELECT
CR.CREDIT_NAME,
TK.TRADE_ACCT_NUM,
CR.CREDIT_REG_NUM,
TK.TRADE_ID,
TK.ACTION_ID
FROM [TAKER] TR
INNER JOIN [CREDITOR] CR
ON TR.TRADE_ACCT_NUM = CR.TRADE_ACCT_NUM
WHERE SUBSTRING([TRADE_ID],3,8) = SUBSTRING([TRADE_ID],3,8)
OR TR.ACTION_ID = CR.ACTION_ID
ORDER BT
TR.TRADE_ACCT_NUM
В настоящее время с моим столом у меня есть следующие вопросы. Я получаю около 90% моего желаемого результата для совпадений, однако некоторые строки из таблицы Takers полностью исключены. Иногда есть совпадение на основе номера учетной записи, но TRADE_ID имеет значение null с идентификатором Action_ID, из-за чего строка не выводится. Также нет выходов, если есть совпадение как с Trade_Acct_Num, так и с Action_ID, но не с Trade_ID. Я попытался сделать левое соединение, за которым последовало внутреннее соединение, но это не помогло моей ситуации. Пожалуйста, помогите и объясните. Спасибо
Ваш пример отсутствует CR. и TR. по проверке подстроки. Можете ли вы опубликовать пример данных, которые, по вашему мнению, должны появиться, но нет? – Mike
Кстати, вы можете попробовать: alter table [TAKER] добавить TRADE_MATCH AS SUBSTRING ([TRADE_ID], 3,6), чтобы создать псевдо-поле, в которое вы можете добавить индекс, чтобы ускорить этот запрос. – Mike