За последние 24 часа нас посетили 8370 программистов и 482 робота. Сейчас ищут 257 программистов ...

Выборка по несуществующей записи

Тема в разделе "MySQL", создана пользователем Nerfed, 29 ноя 2018.

  1. Nerfed

    Nerfed Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    121
    Симпатии:
    5
    Пасаны, а как-то можно сделать такое? Есть 2 таблицы:

    1. loans
    [​IMG]
    2. utm
    [​IMG]

    Короче таблицы связаны через id в первой и loan_id во второй. В первой таблице запись есть всегда, во второй её может не быть, а может быть несколько с разными utm_source. Нужно вытащить все записи из первой, когда во второй таблице к ним нет записи с utm_source='admitad'. Это возможно сделать одним SQL-запросом?
    --- Добавлено ---
    Я думал что можно как-то так, но не прокатывает. Ругается: Unknown column 'lid' in 'where clause'
    PHP:
    1. "SELECT `id` AS `lid` FROM `loans`
    2. WHERE (SELECT `id` FROM `utm` WHERE `loan_id`= `lid` AND `utm_source`='admitad') IS NULL"
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.492
    Симпатии:
    122
    PHP:
    1. SELECT id AS lid
    2. FROM `loans`
    3. WHERE id NOT IN (
    4.     SELECT loan_id FROM `utm` WHERE utm_source='admitad'
    5. );
     
  3. Nerfed

    Nerfed Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    121
    Симпатии:
    5
    Я правильно понимаю, что такой запрос будет сильно грузить сервер, если в таблице utm много записей? Оно же внутрь NOT IN вытащит вообще все айдишники. У меня получилось сделать так, но не знаю на сколько это правильно. На тестах вроде работает, но в продакшен ещё не выкладывал.
    PHP:
    1. SELECT `id` FROM `loans` AS `l`
    2. WHERE (SELECT `id` FROM `utm` WHERE `loan_id`= l.`id` AND `utm_source`='admitad') IS NULL
     
    #3 Nerfed, 1 дек 2018
    Последнее редактирование: 1 дек 2018
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.492
    Симпатии:
    122
    1) много записей это для вас сколько? сотни, тысячи, миллионы...?
    2) ну так задача стоит проверить среди всех айдишников. значит придется проверить среди всех. телепатия могла бы помочь, но это фича пока это в стадии бета тестирования
    3) думаю, при наличии индексов, будет работать быстро.