Вы выполняете левое внешнее объединение в своем запросе, это означает, что результат будет содержать все строки таблицы Отношение , независимо от того, есть ли у них соответствующая строка в Контакты .
Часть on User = Number
принадлежит соединению и описывает, какие столбцы составляют отношение. Если вы хотите сравнить эти атрибуты, поместите их в часть WHERE:
SELECT User FROM Relation left join Contacts on (Relation.field = Contacts.field) WHERE User = Number
Кстати, вы должны позаботиться о том, чтобы все переменные, которые вы помещаете в строку SQL, были правильно экранированы, чтобы предотвратить SQL-инъекции.
Изменить:
Согласно комментариям, я пытаюсь сделать пример:
Если вы хотите получить список всех пользователей с соответствующими контактами. Номер, напишите:
SELECT Relation.User FROM Relation INNER JOIN Contacts ON (Relation.User = Contacts.Number)
Результатом будет список строк, каждая строка содержит одно значение Relation.User. Теперь вы можете пройтись по этим строкам и сделать такую строку 8,77,81, ....
Чтобы обновить таблицу, вы можете написать 2 таких обновления:
UPDATE Contacts SET Echo = 'thumbsup' WHERE Contacts.Number IN (8,77,81);
UPDATE Contacts SET Echo = 'thumbsdown' WHERE Contacts.Number NOT IN (8,77,81);