MySQL - не показывать ни одной строки из использования идентификатора - PullRequest
2 голосов
/ 02 октября 2019

Мне просто нужно показать значения, которые не используют конкретно ID. У меня есть две таблицы

таблица 1

id_xx
1
2
3
4
5

таблица 2

id | id_xx
3  |  3
4  |  3
4  |  1

Мне нужны эти результаты, например. Я говорю, какие результаты от ID мне нужно

мне нужен этот результат, где id = 3

id_xx
1
2
4
5

или где id = 4

id_xx
2
4
5

или где id = 1

1
2
3
4
5

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Вы можете LEFT JOIN table1 с помощью table2 и применить фильтр в предложении ON JOIN, а затем выполнить фильтрацию по несопоставленным записям:

SELECT t1.id_xx
FROM table1 t1
LEFT JOIN table2 t2 ON t2.id_xx = t1.id_xx AND t2.id = ?
WHERE t2.id IS NULL

Вы можете заменитьвопросительный знак с id, который необходимо проверить.

Демонстрация на DB Fiddle :

Учитывая t2.id = 3:

| id_xx |
| ----- |
| 1     |
| 2     |
| 4     |
| 5     |

Дано t2.id = 4:

| id_xx |
| ----- |
| 2     |
| 4     |
| 5     |
0 голосов
/ 02 октября 2019

Другой подход заключается в использовании коррелированного подзапроса с NOT EXISTS():

SELECT t1.id_xx
FROM table1 AS t1
WHERE NOT EXISTS (SELECT 1 
                  FROM table2 AS t2 
                  WHERE t2.id = ?   -- your input id here
                    AND t2.id_xx = t1.id_xx)

Если у вас большие таблицы и вы беспокоитесь о производительности этих запросов, то вы может определить следующий индекс:

  • Для коррелированного подзапроса определите составной индекс (id, id_xx) для table2.
ALTER TABLE table2 ADD INDEX(id, id_xx);

Предполагаячто id_xx уже является первичным ключом в таблице1. Таким образом, вам не нужно определять какой-либо индекс там. Если нет, то вы можете определить индекс по нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...