我确信我的标题还有很多不足之处,但让我试着解释一下这个问题。
我有一个像这样的表格帐户:
+----------+-----------+-----------+
| id | name | email |
+----------+-----------+-----------+
| 1 | Bob |bob@bob.com|
+----------+-----------+-----------+
我有一个像这样的包表:
+----------+-----------+-----------+--------+--------+
| id |package_id | start_date|end_date| acc_id |
+----------+-----------+-----------+--------+--------+
| 1 | 15 |2014-01-01 | | 1 |
+----------+-----------+-----------+--------+--------+
一个帐户可以有多个包,但它们不会有相同的包,即package_id为15的两个活动包。
我需要有效地选择所有没有活动包的帐户,其package_id为15或25.我使用以下内容确定包是否处于活动状态:
p.start_date >= NOW() and p.end_date <= NOW() or p.end_date = '0000-00-00' or ISNULL(p.end_date)))
我已经看到我可以说在查询中有第二个选择,指定选择一个名称,然后使用此值进行比较。例如,
(select * from packages as p where p.start_date >= NOW() and p.end_date <= NOW() or p.end_date = '0000-00-00' or ISNULL(p.end_date))) AND acc_id = accounts.id AND package_id IN(15,25)) AS has_package
我可以这么说:
has_package <= 0
所以我正在寻找类似的东西,其中帐户ID是当前的记录ID:
SELECT *
FROM accounts AS a
WHERE (select * from packages as p where p.start_date >= NOW() and p.end_date <= NOW() or p.end_date = '0000-00-00' or ISNULL(p.end_date))) AND p.acc_id = a.id AND package_id IN(15,25)) <= 0
任何帮助都将不胜感激。
答案 0 :(得分:0)
您需要在子查询中使用group by子句,如下所示:
SELECT * 从账户AS a WHERE(从包中选择*作为p,其中p.start_date&gt; = NOW()和p.end_date&lt; = NOW()或p.end_date ='0000-00-00'或ISNULL(p.end_date)))AND p.acc_id = a.id AND package_id IN(15,25)GROUP BY package_id有count(package_id)= 1)