У меня есть две таблицы в базе данных (myCustomTable1 и myCustomTable2), и из них я создаю еще две таблицы (Table1 и Table2), которые создаются во время выполнения. Теперь мне нужно взять строки, которые находятся внутри таблицы 1, но не находятся в таблице 2.
Я нашел этот вопрос, который, кажется, содержит ответ, который мне нужен, но я не могу реализовать это с моим решением, потому что, как сказано, таблицы, которые мне нужно «антиобъединять», генерируются во время выполнения.
Обе мои (генерируемые во время выполнения) таблицы имеют формат:
-----------------------
| Column1 | Column2 |
-----------------------
| | |
-----------------------
| | |
-----------------------
Вот код, который у меня есть.
SELECT Table1.* FROM (
SELECT myCustomTable1.Column1,
myCustomTable1.Column2
) as Table1
LEFT JOIN
(
SELECT Table2.* FROM (
SELECT myCustomTable2.Column1,
myCustomTable2.Column2
) as Table2
)
ON Table1.Column1 = Table2.Column1
AND Table1.Column2 = Table2.Column2
Теперь я в курсе, что это решение не работает, потому что при попытке присоединиться я пытаюсь использовать Table2, которая недоступна в глобальной области видимости, но не могу найти подходящего решения.
Возможно, использование NOT EXISTS
, LEFT OUTER JOIN
или NOT IN
также является вариантом, но при каждой попытке я сталкивался с одной и той же проблемой, когда область действия определенных таблиц является проблемой.
NOT EXISTS
, вероятно, будет лучшим способом. - person Eric   schedule 04.07.2018LEFT JOIN
, а в том, как SQL-Sever управляет областью; так покажи нам, что ты пытаешься сделать. (Вполне вероятно, что вы создаете табличные переменные, но лучше использовать временные таблицы, чтобы убедиться, что нам нужен ваш код...) - person MatBailie   schedule 04.07.2018