Ответ 1
Подобным образом, используя NOT IN
:
SELECT id FROM queryOneTable
WHERE id NOT IN (
SELECT id FROM queryTwoTable
)
Мне нужно объединить два результата запроса, как в объединении, но я хочу только сохранить разницу между этими двумя результатами. Возможно ли это?
Я в основном выбираю ВСЕ ресурсы в Query 1 и НЕ ДОПУСКАЕТ ресурсы в Query 2, я, очевидно, нуждаюсь в ресурсах ALLOWED в своем последнем результате.
В псевдокоде:
Query1 - Query2
Queryresult 1:
+-------+
| id |
+-------+
| 1 |
+-------+
| 2 |
+-------+
| 3 |
+-------+
| 4 |
+-------+
| 5 |
+-------+
| 6 |
+-------+
Queryresult 2:
+-------+
| id |
+-------+
| 2 |
+-------+
| 5 |
+-------+
Требуется:
+-------+
| id |
+-------+
| 1 |
+-------+
| 3 |
+-------+
| 4 |
+-------+
| 6 |
+-------+
Подобным образом, используя NOT IN
:
SELECT id FROM queryOneTable
WHERE id NOT IN (
SELECT id FROM queryTwoTable
)
Я тестировал этот запрос в SQLExpress, так как у меня нет MySql. Я предполагаю, что это работает одинаково.
select x.id
from x
left join y on x.id = y.id
where y.id is null
Левый подход соединения более универсален, поскольку вы можете использовать его в двух таблицах (или любых двух наборах результатов запроса), где уникальность не состоит из одного идентификатора, а из комбинации нескольких значений столбца. Также считается лучшим SQL (или, по крайней мере, он был) для управления внешними соединениями (s.a. слева), поскольку он более эффективен, чем запись вложенных выборок.