mysql удаляет только не ссылочные строки среди & ldquo; IN & rdquo; список [дубликат]

Когда вы используете метод ShowDialog() или Show(), а затем закройте форму, объект формы не будет полностью уничтожен ( closed! = destroy ). Он останется в живых, только он находится в «закрытом» состоянии, и вы все еще можете что-то делать с ним.

105
задан Eric Leschinski 30 December 2016 в 22:44
поделиться

3 ответа

Использование LEFT JOIN / IS NULL:

DELETE b FROM BLOB b 
  LEFT JOIN FILES f ON f.id = b.fileid 
      WHERE f.id IS NULL

Использование NOT EXISTS:

DELETE FROM BLOB 
 WHERE NOT EXISTS(SELECT NULL
                    FROM FILES f
                   WHERE f.id = fileid)

Использование NOT IN:

DELETE FROM BLOB
 WHERE fileid NOT IN (SELECT f.id 
                        FROM FILES f)

Предупреждение

По возможности выполните DELETE в транзакции (при условии, что поддерживается - IE: Not on MyISAM), чтобы вы могли использовать откат для возврата изменений в случае возникновения проблем.

227
ответ дан Abel 15 August 2018 в 22:54
поделиться
  • 1
    который, в общем, самый быстрый из вышеперечисленных? – Hampus Brynolf 10 April 2012 в 19:02
  • 2
    @HampusBrynolf: это специфичный для MySQL - это зависит от того, являются ли столбцы нулевыми или недействительными – OMG Ponies 11 April 2012 в 02:57
  • 3
    По какой-то причине удаление с использованием LEFT JOIN не работало на MS SQL Server Mgmt Studio (не уверен, почему, он просто жаловался на LEFT JOIN). Кто-нибудь знает, почему? Он работал, используя НЕ СУЩЕСТВУЮЩИЕ, хотя :) – Anna 15 May 2014 в 18:52
  • 4
    FYI, вот полезное обсуждение относительной эффективности этих трех методов: explainextended.com/2009/09/18/… – moustachio 8 June 2014 в 15:02
  • 5
    Для людей, пытающихся использовать этот w / SQLite: см. этот ответ – bunkerdive 14 October 2016 в 17:06
DELETE FROM blob
WHERE NOT EXISTS (
    SELECT *
    FROM files
    WHERE id=blob.id
)
9
ответ дан George 15 August 2018 в 22:54
поделиться
DELETE FROM blob 
WHERE fileid NOT IN 
       (SELECT id 
        FROM files 
        WHERE id is NOT NULL/*This line is unlikely to be needed 
                               but using NOT IN...*/
      )
22
ответ дан Martin Smith 15 August 2018 в 22:54
поделиться
  • 1
    Что такое & quot; / * Эта строка вряд ли понадобится, но предполагается, что значение NOT IN ... * / & quot; означает? – Pacerier 10 April 2015 в 14:13
  • 2
    @Pacerier - NOT IN (NULL) возвращает пустой набор результатов, поэтому необходимо исключить NULL. Но столбец id, вероятно, не будет иметь значение NULL, так что «вряд ли понадобится». – Martin Smith 10 April 2015 в 16:40
  • 3
    Ничего себе хороший улов. Таким образом, ответ омбудсменов ошибочен! not in(null) довольно логично, почему он не работает? В чем смысл этого? – Pacerier 11 April 2015 в 14:41
  • 4
  • 5
    @bunkerdive Затем используйте три имени объекта объекта, которые включают имя базы данных. – Martin Smith 29 April 2016 в 09:32
Другие вопросы по тегам:

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