2013-03-29 4 views
0

Следующий запрос возвращает кучу пар дубликатов решений:.Почему этот запрос IN (внутренний запрос) не возвращает никаких результатов?

SELECT * 
FROM solutions s1, solutions s2 
WHERE s2.ID <> s1.ID 
AND s2.solution = s1.solution 

Я ищу просто для количества повторяющихся решений, так что не будет работать (например, если есть n дубликаты, то возвращает n! строк).

Следующий запрос должен работа возвращать только те решения, которые дублируются, но вместо возвращает 0 результатов:

SELECT * 
FROM solutions s1 
WHERE s1.ID IN 
(
    SELECT s2.ID 
    FROM solutions s2 
    WHERE s2.ID <> s1.ID 
    AND s2.solution = s1.solution 
) 

Я не могу за жизнь мне понять, почему. Существуют ли ограничения на внутренние запросы в MySQL, о которых я не знаю?

ответ

1

Ваш внутренний запрос не возвращает никаких строк, потому что невозможно найти s1.ID IN() список, выбранный из идентификаторов, которые не соответствуют s1.ID.

+0

Да, я знаю об этом, пожалуйста, прочитайте вопрос ... –

+0

@ BlueRaja-DannyPflughoeft см. Редактировать –

+0

Re Редактировать: Конечно, 's1.ID' не будет в списке, который не содержит' s1.ID' - это, возможно, самая тупая ошибка, которую я когда-либо делал. Спасибо, что указали, что я соглашусь, когда это позволит. –

1

Вы можете использовать COUNT(), чтобы определить это довольно легко

SELECT solution, COUNT(id) AS `count` 
FROM solutions 
GROUP BY solution 
HAVING `count` > 1 

Чтобы ответить на ваш вопрос. Во внутреннем запросе вы не можете ссылаться на внешнюю таблицу s1.

+0

Не будет ли невозможность ссылаться на какое-либо отношение на ошибку? (Я использую SQL Server и ожидаю столько же.) – 2013-03-29 00:21:31

+0

Я предполагаю, что вы имеете в виду 'solution', а не' id'. Но этот ответ касается моего вопроса ... –

+0

@ BlueRaja-DannyPflughoeft Вы показываете 'solutions' как имя вашей таблицы и' id' как поле, в котором вы ищете обманы в вашем примере. Я предоставил информацию о том, почему ваш подзаголовок не работает. Хотя я добавил это вскоре после моего первоначального ответа. –

Смежные вопросы