Конвертировать MySQL NOT EXISTS в INNER JOIN

Я немного новичок в присоединениях, поэтому я даже не уверен, возможно ли это. Я гуглил и пробовал несколько вещей..

Что мне нужно:

Выберите data.id, где соответствующий user2data.user_id не существует, где user2data.user_id = 'X'

Волнует правильно?:D

Что работает:

SELECT * FROM data WHERE NOT EXISTS (SELECT * FROM user2data WHERE user2data.user_id=1 AND user2data.data_id=data.id) LIMIT 100;

Однако это медленно, хотя все 3 столбца проиндексированы. Я попытался НАУЧНОЕ СОЕДИНЕНИЕ для этой цели из другого ответа SO, но это даже меньше, чем выше. Что мне нужно, это ВНУТРЕННЕЕ СОЕДИНЕНИЕ.

Пожалуйста, дайте мне знать, если это действительно возможно, или если есть альтернатива, которая использует индексы.

Спасибо и всего наилучшего

1 ответ

Может быть, вы можете использовать левое соединение

SELECT * 
FROM data WHERE 
LEFT JOIN user2data ON (  user2data.user_id=1 AND user2data.data_id=data.id )
where user2data.data_id is null
LIMIT 100;
Другие вопросы по тегам