За последние 24 часа нас посетили 64766 программистов и 1744 робота. Сейчас ищут 859 программистов ...

SELECT * FROM `table_2` WHERE ???

Тема в разделе "MySQL", создана пользователем Rentony, 9 ноя 2014.

  1. Rentony

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

    С нами с:
    14 фев 2012
    Сообщения:
    20
    Симпатии:
    0
    Доброго времени суток уважаемые программисты!
    Подскажите как реализовать такую выборку.
    Имеется таблица `table_1` с полем `id_1`, в ней два значения - '1', '3'
    Так же имеется таблица `table_2` с полем `id_2`, в ней пять значений - '1', '2', '3', '4', '5'
    Как сделать выборку из `table_2` только тех значений, которых нет в `table_1`, то есть '2', '4', '5' ?
    Сейчас делаю это в PHP, но пришло время оптимизации )) и всю голову сломал уже, гугл не помог ((
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Код (PHP):
    1. SELECT `t2`.* 
    2.     FROM `table_2` `t2`
    3. LEFT JOIN `table_1` `t1` 
    4.     ON ( `t2`.`id_2` = `t1`.`id_1` )
    5. WHERE 
    6.     `t1`.`id_1` IS NULL; 
     
  3. Rentony

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

    С нами с:
    14 фев 2012
    Сообщения:
    20
    Симпатии:
    0
    Работает)) сейчас всё читаю учебники по MySQL, но не могу понять как сделать ту же выборку из `table_2`, если в `table_1` содержится еще поле `val_1`, и нужно учитывать толькое те записи, в которых `val_1` равен например 'ok'
    Делал так:
    Код (Text):
    1. SELECT `t2`.*
    2.     FROM `table_2` `t2`
    3. LEFT JOIN `table_1` `t1`
    4.     ON ( `t2`.`id_2` = `t1`.`id_1` )
    5. WHERE
    6.     `t1`.`id_1` IS NULL AND `t1`.`val_1` = 'ok';
    Не работает ((

    Добавлено спустя 14 минут 36 секунд:
    УРА! Допер!))) Спасибо огромнейшее )))
    Код (Text):
    1. SELECT `t2`.*
    2.     FROM `table_2` `t2`
    3. LEFT JOIN `table_1` `t1`
    4.     ON ( `t2`.`id_2` = `t1`.`id_1` )
    5. WHERE
    6.     `t1`.`id_1` IS NULL OR `t1`.`val_1` != 'ok';
    Добавлено спустя 30 минут 33 секунды:
    Эффект совсем не тот которого ожидал (( очень долго выполняется запрос. Дело в том что в таблице `table_1` миллионы записей, и тысячи вариаций поля `val_1`, в `table_2` тоже десятки тысяч записей, и получается что в PHP у меня с `table_2` сравнивается лишь выбранная часть записей из `table_1`, а тут получается что сравниваются абсолютно все, и запрос выполняется по пол минуты даже с LIMIT 0,100.
    Можно ли как то оптимизировать данный запрос?
    Например:
    Код (Text):
    1. SELECT `t2`.*
    2.     FROM `table_2` `t2`
    3. LEFT JOIN `table_1` `t1` WHERE `t1`.`val_1` = 'ok'
    4.     ON ( `t2`.`id_2` = `t1`.`id_1` )
    5. WHERE
    6.     `t1`.`id_1` IS NULL;
    Этот код не работает, но думаю смысл понятен =)