2015-01-29 2 views
1

У меня есть проблема. Я хочу получить всех пользователей, где другой пользователь должен играть против следующего. My SQL выбрать выглядит так:MYSQL ERROR 1242: Подзапрос возвращает более 1 строки

SELECT Benutzer.benutzername 
 
        FROM Benutzer 
 
        WHERE Benutzer_ID = 
 
        (SELECT Benutzer_ID_1 
 
        FROM Spiel WHERE NextToPlay ='35' 
 
        AND Benutzer_ID_2 ='35') 
 
        AND 
 
        Benutzer_ID = 
 
        (SELECT Benutzer_ID_2 
 
        FROM Spiel WHERE NextToPlay ='35' 
 
        AND Benutzer_ID_1 ='35');

Но всегда есть ошибка, что мой подзапрос возвращает более 1 строку. Может кто-нибудь мне помочь?

+0

Каковы результаты ваших подзапросов? –

+0

Просто используйте LIMIT 1 в подзапросе –

+0

Ваша проблема уже понятна. Ваш подзапрос возвращает более 1 строки. Что теперь? Поделитесь своей табличной структурой было бы здорово. – RubahMalam

ответ

1
SELECT Benutzer.benutzername 
        FROM Benutzer 
        WHERE Benutzer_ID IN 
        (SELECT Benutzer_ID_1 
        FROM Spiel WHERE NextToPlay ='35' 
        AND Benutzer_ID_2 ='35') 
        AND 
        Benutzer_ID IN 
        (SELECT Benutzer_ID_2 
        FROM Spiel WHERE NextToPlay ='35' 
        AND Benutzer_ID_1 ='35'); 

При использовании вложенных запросов вы должны смотреть на использование IN, что позволяет более 1 результат.

Если вы не уверены, что ваш запрос будет возвращать только 1 строку

0

один или оба ваших подзапросов возвращается более одного результата. При использовании оператора = вы должны вернуть один результат. Вместо этого вы могли бы запустить с помощью оператора IN, чтобы получить более одного результата:

SELECT Benutzer.benutzername 
       FROM Benutzer 
       WHERE Benutzer_ID IN 
       (SELECT Benutzer_ID_1 
       FROM Spiel WHERE NextToPlay ='35' 
       AND Benutzer_ID_2 ='35') 
       AND 
       Benutzer_ID IN 
       (SELECT Benutzer_ID_2 
       FROM Spiel WHERE NextToPlay ='35' 
       AND Benutzer_ID_1 ='35'); 
Смежные вопросы