Das Problem mit dem Datum ist unlösbar. Ein
*_date_added oder
*_date_account_created mit 0000-00-00 00:00:00 läßt sich nun mal nicht mehr zeitlich bestimmen. Ich würde mich fragen wie das zustande kommen kann.
Wenn es Altlasten sein könnten und jedes neu erstellte Konto immer einen Eintrag in die
customers und die
customers_info macht dürftest du davon ausgehen können, daß es irgendwelche Altlasten sind (wir kennen die Geschichte des Shops ja nicht).
Jedenfalls würde ich simpler vorgehen, um nicht eine zu komplexe Query zu haben die dann eher Gefahr läuft fehlerbehaftet zu sein.
Das Format des Datums in deinen Beispielen ist übrigens verkehrt.
DELETE FROM customers
WHERE (customers_date_added < '2019-01-01 00:00:00' OR customers_date_added = '0000-00-00 00:00:00')
AND customers_id NOT IN (SELECT customers_id FROM orders);
Und dann einfach alle weiteren Tabellen in welchen sich Kundendaten befinden folgendermaßen gemessen an der bereits bereinigten
customers-Tabelle bereinigen:
DELETE FROM address_book WHERE customers_id NOT IN (SELECT customers_id FROM customers;
Achtung, wie bereits selbst bemerkt
customers_info_id;
DELETE FROM customers_info WHERE customers_info_id NOT IN (SELECT customers_id FROM customers;
DELETE FROM ccustomers_ip WHERE customers_id NOT IN (SELECT customers_id FROM customers;
Achtung, hier muß mangels
customers_id mit
customers_email_address verglichen werden:
DELETE FROM customers_login WHERE customers_email_address NOT IN (SELECT customers_email_address FROM customers;
DELETE FROM customers_memo WHERE customers_id NOT IN (SELECT customers_id FROM customers;
DELETE FROM customers_status_history WHERE customers_id NOT IN (SELECT customers_id FROM customers;
Daß vor jeglicher DELETE-Aktion alle Tabellen gesichert werden sollten versteht sich von selbst.Gruß,
noRiddle
*NACHTRAG*
NOT IN anstatt NOT EXISTS ist hier ein wenig effektiver und ergibt auch keine verkehrten Ergebnisse, da die verglichenen Werte nicht NULL sein können.
(siehe z.B.
NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL: MySQLoder
MySQL: When NOT IN Is Not Equal to NOT EXISTS)