За последние 24 часа нас посетили 22922 программиста и 1236 роботов. Сейчас ищут 749 программистов ...

Выборка из двух таблиц ?

Тема в разделе "MySQL", создана пользователем elikmhs546, 11 окт 2019.

  1. elikmhs546

    elikmhs546 Новичок

    С нами с:
    6 сен 2019
    Сообщения:
    6
    Симпатии:
    1
    Как выбрать из двух таблиц

    Таблица: 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

    Помогите пожалуйста

    Буду благодарен за любую помощь
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    это нормально, потому как запись FROM table1, table2 говорит: "таблицу 1 умножить на таблицу 2"

    У тебя скорее всего нарушение нормализации хранения данных, отсюда и растут рога с копытами.

    Тебе надо вывести имена из первой таблицы которых нет во второй таблице?
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    ты получил верный с т.з. SQL результат — буквально то что попросил, но это не тот результат, который ожидал.
    можешь сказать понятным русским языком что ты хотел получить? что это за три записи, которые ты ждал?

    записи в двух таблицах наверное должны быть как-то связаны помимо того, что имена в них совпадают или не совпадают. я думаю, что не хватает этого ограничительного условия.
    --- Добавлено ---
    для справки, DISTINCT обеспечивает уникальность записей целиком. учитываютcя все поля во фразе SELECT.
    например "Вася, Петя" и "Петя, Вася" это разные записи и они останутся обе.

    не буду дальше углубляться чтобы случайно не дать тебе готовый код до того, как ты сформулировал цель :D

    в идеале, создай песочницу на db-fiddle.com чтобы мы могли попробовать.
     
  4. elikmhs546

    elikmhs546 Новичок

    С нами с:
    6 сен 2019
    Сообщения:
    6
    Симпатии:
    1
    Точно
     
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Код (Text):
    1. SELECT DISTINCT t1.*
    2. FROM table1 t1
    3.   LEFT JOIN table2 t2
    4.      ON t1.name = t2.name
    5. WHERE t2.name IS NULL
    попробуй так
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    оказал медвеж. услугу ))) жди нового прихода

    кстати, distinct здесь лишний
    --- Добавлено ---
    @elikmhs546 советую гуглить "sql tutorial not exists"
     
  7. elikmhs546

    elikmhs546 Новичок

    С нами с:
    6 сен 2019
    Сообщения:
    6
    Симпатии:
    1
    Спасибо все работает
    --- Добавлено ---
    А вот и другое решение

    SELECT * FROM table2 WHERE name NOT IN (SELECT name FROM table1
     
    artoodetoo нравится это.