Предполагая, что в 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).
Просто натолкнулось на более простое решение:
select * from total_students where class="fourth" and s_id not in (select s_id from failed_students where class="fourth");
Казалось, это работает для меня, но не уверен, что это эффективно во всех ситуациях.
Вы ищете 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';
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";