我有一个用于记录客户交易的数据库。
表(交易)的详情如下:
ID | Added-date | userid | amount | department | transaction-date | addedby 1 yyyy-mm-dd P1001 9.78 dpt 1 yyyy-mm-dd username 1 yyyy-mm-dd P1023 19.78 dpt 2 yyyy-mm-dd username 1 yyyy-mm-dd P1021 39.78 dpt 3 yyyy-mm-dd username 1 yyyy-mm-dd T1501 9.78 dpt 2 yyyy-mm-dd username
我想要做的是能够查看从未在x部门购买任何东西的所有用户。
有没有人对最佳方法有任何建议?
答案 0 :(得分: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')
答案 1 :(得分:0)
当您只有几个客户时,您可以按顺序遍历所有记录并按字段部门排序。或者您可以按现场部门对它们进行分组。例如2-dim数组:
$sort[$department][]=$record;
然后您可以使用其他编程逻辑进行过滤。
答案 2 :(得分:0)
还有一个子查询语法:
SELECT *
FROM users
WHERE (SELECT COUNT(id) FROM transactions WHERE transactions.userid = users.id) = 0