0

我有一个用于记录客户交易的数据库。

表(交易)列示如下:

身份证 | 添加日期 | 用户名 | 金额 | 部门 | 交易日期 | 添加者
1 yyyy-mm-dd P1001 9.78 dpt 1 yyyy-mm-dd 用户名
1 yyyy-mm-dd P1023 19.78 dpt 2 yyyy-mm-dd 用户名
1 yyyy-mm-dd P1021 39.78 dpt 3 yyyy-mm-dd 用户名
1 yyyy-mm-dd T1501 9.78 dpt 2 yyyy-mm-dd 用户名

我想做的是能够查看部门 x 中所有从未购买过任何东西的用户。

有人对解决此问题的最佳方法有任何建议吗?

4

3 回答 3

2

有几种方法可以做到这一点。我喜欢OUTER JOIN/NULL检查的语法:

select distinct t.userid
from transactions t
    left join transactions t2 
        on t.userid = t2.userid and t2.department = 'Some Dept'
where t2.userid is null

DISTINCT可能需要也可能不需要 - 取决于您想要的结果。

您也可以使用NOT IN(但我在 MySQL 中看到了性能问题):

select distinct userid
from transactions
where userid not in (
    select userid
    from transactions
    where department = 'Some Dept')
于 2013-06-13T13:29:26.850 回答
0

当您只有几个客户时,您可以遍历所有记录并按现场部门排序。或者您可以按现场部门对它们进行分组。例如一个二维数组:

    $sort[$department][]=$record;

然后您可以使用另一个编程逻辑进行过滤。

于 2013-06-13T13:30:03.243 回答
0

还有一个子查询语法:

SELECT *
FROM users
WHERE (SELECT COUNT(id) FROM transactions WHERE transactions.userid = users.id) = 0
于 2013-06-13T13:31:20.893 回答