2014-02-07 2 views
0

Мое программное обеспечение для выставления счетов занимает много времени, поэтому я пытаюсь очистить старые данные (что-то, что не связано с моей текущей «BusinessID»), но я застрял!SQLite - Удаление строк на основе двух других таблиц

У меня есть 3 таблицы - я перечислил соответствующие столбцы для каждой таблицы:

компании (клиенты): ID, clientOfBusinessID

счета-фактуры: ID, invoiceOfClientID

invoice_line_items lineItemO fInvoiceID,

Я хотел бы удалить все строки * invoice_line_items *, которые НЕ относятся к моей текущей деятельности.

следующее утверждение кажется, чтобы показать мне все клиенты, которые не связаны с моим текущим бизнесом:

companies.clientOfBusinessID NOT LIKE '%41A1%' 

Как будет идти об этом? У меня была игра с запросами JOIN, но я не могу ее собрать.

Если честно, я понятия не имею, что я делаю, просто читаю гиды в Интернете, и это лучшее, что я мог придумать, - не работает вообще!

DELETE from invoice_line_items 
    FROM invoices JOIN companies ON invoices.invoiceOfClientID = companies.id 
    JOIN invoice_line_items ON invoices.id = invoice_line_items.lineItemOfInvoiceID 
    WHERE companies.clientOfBusinessID NOT LIKE '%41A1%' 

Любые идеи?

Большое спасибо

+0

Можете ли вы уточнить, что «вообще не работает»? – Zec

ответ

1

Этот запрос (если я правильно понял ваш structire правильно) даст вам все счета, которые не ralated вашей компании:

SELECT i.* 
FROM invoices i 
INNER JOIN companies c 
    ON i.invoiceOfClientID = c.id 
WHERE c.clientOfBusinessID NOT LIKE '%41A1%' 

Чтобы удалить отдельные позиции счета мы можем использовать запрос выше, следующим образом:

DELETE from invoice_line_items 
WHERE lineItemOfInvoiceID IN 
    (SELECT i.id 
    FROM invoices i 
    INNER JOIN companies c 
    ON i.invoiceOfClientID = c.id 
    WHERE c.clientOfBusinessID NOT LIKE '%41A1%') 

Вы можете затем также удалить счета-фактуры также:

DELETE from invoices 
WHERE id IN 
    (SELECT i.id 
    FROM invoices i 
    INNER JOIN companies c 
    ON i.invoiceOfClientID = c.id 
    WHERE c.clientOfBusinessID NOT LIKE '%41A1%') 
+0

Большое спасибо, это блестяще. Сброс нагрузки избыточных данных. – user3281970

Смежные вопросы