Получить элементы Distinct в двух таблицах mysql с выбранными значениями полей, используя php или sql

0

Предполагая, что в sql есть две таблицы, которые имеют почти одинаковые значения, среди которых первая таблица может считаться полными данными, а вторая таблица имеет выборочные данные. Мне нужно получить данные в первой таблице, которая не является частью второй таблицы. но здесь мне нужно сравнить выборочные строки из обеих таблиц. Предположим, что есть две таблицы:

 total_students(s_id,s_name,s_class) and failed_students(s_id,s_name,s_class)

Все, что мне нужно получить, это список студентов, которые находятся в студенте таблицы, но не в fail_student только для определенного класса.

Я попытался использовать array_diff() для результатов для параметризованных запросов выбора из обеих таблиц, но не мог, поскольку результат в форме объекта. Более того, для такой логики мне придется запускать несколько запросов.

также попытался решить то же самое с sql, как предложено здесь, используя запрос follwing

SELECT * 
FROM total_students 
      LEFT OUTER JOIN failed_students 
      ON total_students.s_id = failed_students.s_id 
WHERE total_students.s_id IS NULL AND total_students.s_class="fourth";

но это также не помогает.

Просьба предложить способ эффективного его использования с использованием php или sql (preffered).

Теги:

3 ответа

0

Просто натолкнулось на более простое решение:

select * from total_students where class="fourth" and s_id not in (select s_id from failed_students where class="fourth");

Казалось, это работает для меня, но не уверен, что это эффективно во всех ситуациях.

0

Вы ищете total_students не в fail_students, поэтому ваше условие WHERE должно быть в таблице failed_students, а не на total_students:

SELECT * 
FROM total_students 
      LEFT OUTER JOIN failed_students 
      ON total_students.s_id = failed_students.s_id 

WHERE failed_students.s_id IS NULL
  AND total_students.s_class = 'fourth';
0

Oracle MINUS занимает 2 набора данных и дает вам разницу.

SELECT s_id,s_name,s_class FROM total_students where total_students.s_class="fourth"
MINUS
SELECT s_id,s_name,s_class FROM failed_students where failed_students.s_class="fourth"

И еще один способ. Вы хотите проверить, является ли идентификатор fail_students нулевым (при условии, что ключ)

SELECT * 
FROM total_students 
      LEFT OUTER JOIN failed_students 
      ON total_students.s_id = failed_students.s_id 
WHERE failed_students.s_id IS NULL AND total_students.s_class="fourth";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню