SQLite-基于其他两个表删除行
我的发票软件需要很长时间才能启动,所以我试图清除旧数据(任何与我当前的“BusinessID”无关的数据),但我被卡住了 我有3个表-我列出了每个表的相关列: 公司(客户): 身份证件 clientOfBusinessID 发票: 身份证件 客户发票 发票行项目 LineItemOfVoiceID 我想删除与我当前业务不相关的所有*发票\行\项目*行 以下陈述似乎向我展示了与我当前业务无关的所有客户:SQLite-基于其他两个表删除行,sql,sqlite,Sql,Sqlite,我的发票软件需要很长时间才能启动,所以我试图清除旧数据(任何与我当前的“BusinessID”无关的数据),但我被卡住了 我有3个表-我列出了每个表的相关列: 公司(客户): 身份证件 clientOfBusinessID 发票: 身份证件 客户发票 发票行项目 LineItemOfVoiceID 我想删除与我当前业务不相关的所有*发票\行\项目*行 以下陈述似乎向我展示了与我当前业务无关的所有客户: companies.clientOfBusinessID NOT LIKE '%41A1%'
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%'
有什么想法吗
非常感谢此查询(如果我正确理解您的结构)将为您提供与贵公司无关的所有发票:
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%')
你能详细解释一下“根本不起作用”吗?非常感谢,太棒了。清除了大量冗余数据。