Если вы не хотите показывать объявления в таблице или , то запрос, который вам нужен, следующий:
SELECT id
FROM members
WHERE id NOT IN ( any id from any other table )
Чтобы выбрать идентификаторы из других таблиц:
SELECT id
FROM <othertable>
Таким образом:
SELECT id
FROM members
WHERE id NOT IN (SELECT id FROM dog_shareoffered)
AND id NOT IN (SELECT id FROM dog_sharewanted)
Я добавил «SELECT DISTINCT», потому что один участник может разместить много объявлений, но есть только один идентификатор. Раньше у меня было SELECT DISTINCT
в подзапросах выше, но, как отмечается в комментариях ниже, не обязательно.
Если вы хотите избежать подзапроса (возможное увеличение производительности в зависимости от ..), вы можете использовать ЛЕВЫЕ СОЕДИНЕНИЯ:
SELECT members.id
FROM members
LEFT JOIN dog_shareoffered
ON dog_shareoffered.id = members.id
LEFT JOIN dog_sharewanted
ON dog_sharewanted.id = members.id
WHERE dog_shareoffered.id IS NULL
AND dog_sharewanted.id IS NULL
Почему это работает:
Он берет таблицу members
и присоединяет ее к двум другим таблицам в столбце id
.
LEFT JOIN
означает, что если элемент существует в таблице members
, но не таблицы, к которой мы присоединяемся (например, dog_shareoffered
), то соответствующие столбцы dog_shareoffered
будут иметь NULL
в них.
Итак, условие WHERE
выбирает строки, в которых есть NULL
id как в dog_shareoffered
, так и dog_sharewanted
, что означает, что мы нашли идентификаторы в members
без соответствующего идентификатора в двух других таблицах.