Как выбрать из двух таблиц Таблица: tabel1 Столбцы: name, job В этой таблице имена (name) могут повторяться Таблица: tabel2 Столбцы: name, sex В этой таблице имена (name) не повторяться, то есть они уникальные Вопрос: Как выбрать из tabel2 те имена (name) которые не совпадают с именами (name) в tabel1 Что я смог сделать? Нечего ) Вывести совпадающие имена (name) SELECT DISTINCT table1.name, table2.name FROM table1, table2 WHERE table1.name=table2.name ORDER by table2.name А вот в отрицательном порядки не вышло ( WHERE table1.name!=table2.name ORDER by table2.name Записи начали дублироваться, то есть в место трех имен выводит 12 Помогите пожалуйста Буду благодарен за любую помощь
это нормально, потому как запись FROM table1, table2 говорит: "таблицу 1 умножить на таблицу 2" У тебя скорее всего нарушение нормализации хранения данных, отсюда и растут рога с копытами. Тебе надо вывести имена из первой таблицы которых нет во второй таблице?
ты получил верный с т.з. SQL результат — буквально то что попросил, но это не тот результат, который ожидал. можешь сказать понятным русским языком что ты хотел получить? что это за три записи, которые ты ждал? записи в двух таблицах наверное должны быть как-то связаны помимо того, что имена в них совпадают или не совпадают. я думаю, что не хватает этого ограничительного условия. --- Добавлено --- для справки, DISTINCT обеспечивает уникальность записей целиком. учитываютcя все поля во фразе SELECT. например "Вася, Петя" и "Петя, Вася" это разные записи и они останутся обе. не буду дальше углубляться чтобы случайно не дать тебе готовый код до того, как ты сформулировал цель в идеале, создай песочницу на db-fiddle.com чтобы мы могли попробовать.
Код (Text): SELECT DISTINCT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.name = t2.name WHERE t2.name IS NULL попробуй так
оказал медвеж. услугу ))) жди нового прихода кстати, distinct здесь лишний --- Добавлено --- @elikmhs546 советую гуглить "sql tutorial not exists"
Спасибо все работает --- Добавлено --- А вот и другое решение SELECT * FROM table2 WHERE name NOT IN (SELECT name FROM table1