SQLite - 连接 2 个表,根据部分字符串匹配排除某些行

SQLite - Joining 2 tables excluding certain rows based on a partial string match

假设我有两个 tables:

Table一个

Names Sales Department
Dave 5 Shoes
mike 6 Apparel
Dan 7 Front End

Table B

Names SALES Department
Dave 5 Shoes
mike 12 Apparel
Dan 7 Front End
Gregg 23 Shoes
Kim 15 Front End

我想创建一个按名称连接 table 并按 table 分隔销售额总和的查询。我还想过滤我的查询以删除字符串匹配或在这种情况下按某些名称的部分匹配。

我要的是下面的结果

Table C:

A Sales Sum B Sales Sum
18 24

我知道我可以通过如下查询来做到这一点:

SELECT SUM(A.sales) AS 'A Sales Sum', SUM(B.sales) AS 'B sales Sum' FROM A
JOIN B
ON B.names = A.Names
WHERE Names NOT LIKE '%Gregg%' OR NOT LIKE '%Kim%'

问题在于 WHERE 子句似乎不适用,或者适用于错误的 table。由于 Names 列在两者之间并不完全匹配,我认为发生的情况是当它们被加入 'ON B.names = A.Names' 时,来自 B 的额外内容被排除在外?当我翻转事物时,虽然我得到了相同的结果,但没有应用过滤器。我得到的错误结果如下:

Table D:

A Sales Sum B Sales Sum
18 62

很明显,我在这里遇到了语法问题,因为我是 SQL 的新手。我错过了什么?谢谢!

我想你想要一个联合方法:

SELECT
    SUM(CASE WHEN src = 'A' THEN sales ELSE 0 END) AS "A Sales Sum",
    SUM(CASE WHEN src = 'B' THEN sales ELSE 0 END) AS "B Sales Sum"
FROM
(
    SELECT sales, 'A' AS src FROM A WHERE Names NOT IN ('Gregg', 'Kim')
    UNION ALL
    SELECT sales, 'B' FROM B WHERE Names NOT IN ('Gregg', 'Kim')

) t;

这里有一个 demo 表明上面的查询有效。

您不需要 table 的连接或并集,您不应该这样做。
分别聚合每个 table 和 return 具有 2 个子查询的结果:

SELECT 
  (SELECT SUM(Sales) FROM A WHERE Names NOT LIKE '%Gregg%' AND Names NOT LIKE '%Kim%') ASalesSum,
  (SELECT SUM(Sales) FROM B WHERE Names NOT LIKE '%Gregg%' AND Names NOT LIKE '%Kim%') BSalesSum