Выбрать все из таблицы A, присоединиться к таблице b, где нет в сводной таблице [дубликата]

Попробуйте разделить / 1

select if(value/1>0 or value=0,'its a number', 'its not a number') from table
242
задан Philip Morton 18 December 2008 в 10:36
поделиться

8 ответов

326
ответ дан Community 23 August 2018 в 19:47
поделиться
  • 1
    Как всегда, стоит профилировать выполнение запросов по вашему целевому набору данных, чтобы выбрать тот, который имеет лучшую производительность. Оптимизаторы SQL в наши дни достаточно хороши, что результаты производительности часто удивляют. – Greg Hewgill 15 December 2008 в 10:44
  • 2
    избегать IN, использовать EXISTS - подсказка в заголовке вопроса – annakata 15 December 2008 в 13:02
  • 3
    Левое внешнее соединение, вероятно, самое быстрое в общем случае, поскольку оно предотвращает повторное выполнение подзапроса. – WOPR 15 December 2008 в 22:40
  • 4
    Не быть придирчивым, но подзапрос по моему предложению возвращает & lt; code & gt; select 'x' & lt; / code & gt; и не & lt; code & gt; выберите * & lt; / code & gt; – Alterlife 17 December 2008 в 09:36
  • 5
    да - руководство MySQL предполагает, что это нормально для запроса «EXISTS» – Alnitak 17 December 2008 в 10:31
  • 6
    @Alnitak: во втором запросе вам не нужно SELECT * в подзапросе. Вместо этого, например, SELECT 1, должно быть достаточно. – Alexander Abakumov 6 November 2015 в 17:27

Есть несколько различных способов сделать это с различной эффективностью, в зависимости от того, насколько хорош ваш оптимизатор запросов, и относительного размера ваших двух таблиц:

[g2] Это самое короткое утверждение, и оно может быть самым быстрым если ваша телефонная книга очень короткая: [/g2]
function chkboxToggle() {
  if ($('input#chkbox').attr('checked'))
    // do something
  else
    // do something else
}
[g3] альтернативно (благодаря

Alterlife

) [/g3]
<input id="chkbox" type="checkbox" onclick="chkboxToggle()" />
[g4] или (благодаря WOPR) [/g4] [f3] [g5] (игнорируя тот факт, что, как уже говорили другие, обычно лучше выбирать только нужные столбцы, а не '[f4]') [/g5]
338
ответ дан Community 6 November 2018 в 03:15
поделиться
  • 1
    избегайте IN, используйте EXISTS - подсказка есть в названии вопроса – annakata 15 December 2008 в 13:02
  • 2
    Левое внешнее соединение, вероятно, является самым быстрым в общем случае, поскольку оно предотвращает повторное выполнение подзапроса. – WOPR 15 December 2008 в 22:40
  • 3
    Не слишком требователен, но подзапрос моего предложения возвращает & lt; code & gt; select 'x' & lt; / code & gt; а не & lt; code & gt; select * & lt; / code & gt; – Alterlife 17 December 2008 в 09:36
  • 4
    да - руководство MySQL предполагает, что это нормально для запроса «EXISTS» – Alnitak 17 December 2008 в 10:31
  • 5
    @Alnitak: Во втором запросе вам не нужен
    lines = 0
    with open(path) as f:
        for line in f:
            lines += 1
    
    в подзапросе. Вместо этого, например, [f2], должно быть достаточно.
    – Alexander Abakumov 6 November 2015 в 17:27
1
ответ дан elfekz 23 August 2018 в 19:47
поделиться
  • 1
    Не уверен, что это отвечает на вопрос, как есть (хотя оператор MINUS) является новым дополнением. Это оказалось в очереди низкого качества - вам может понравиться усилить этот ответ. – ste-fu 21 August 2017 в 12:30
2
ответ дан Ian Nelson 23 August 2018 в 19:47
поделиться
  • 1
    Это вернет вам данные из одной таблицы, если данные отсутствуют в другой таблице для того же столбца – Harvinder Sidhu 24 October 2013 в 15:55
  • 2
    Не могли бы вы также добавить некоторое объяснение того, что это решает? – Steven Westbrook 24 October 2013 в 16:20
1
ответ дан JoshYates1980 23 August 2018 в 19:47
поделиться
  • 1
    Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. - Из обзора – Dennis Kriechel 9 December 2015 в 18:50
  • 2
    @DennisKriechel обновил запрос, чтобы он был более конкретным для вопроса. – JoshYates1980 9 December 2015 в 19:16
3
ответ дан Nat Geo 23 August 2018 в 19:47
поделиться
  • 1
    Столбец id в таблице call не совпадает с столбцом id в таблице Phone_book, поэтому вы не можете присоединиться к этим значениям. См. Ответ WOPR для аналогичного подхода. – Michael Fredrickson 16 February 2012 в 01:11
4
ответ дан Vlado 23 August 2018 в 19:47
поделиться
62
ответ дан WOPR 23 August 2018 в 19:47
поделиться
  • 1
    Это, как правило, самый эффективный метод, поскольку он не выполняет несколько проходов во второй таблице ... надеюсь, что некоторые люди читают comemnts. – Nerdfest 15 December 2008 в 12:57
  • 2
    Я бы предпочел, чтобы профиль людей: если вы не лучший гуру производительности SQL, то заранее сказать, что будет самым быстрым, довольно сложно (и зависит от используемого вами механизма СУБД). – bortzmeyer 16 December 2008 в 09:59
  • 3
    Обозначение Big O легко скажет вам, что вы можете ожидать в этом случае быстрее. Это на порядок разные. – Jonesopolis 30 September 2016 в 13:52
Другие вопросы по тегам:

Похожие вопросы: