gpt4 book ai didi

MySQL 一对多,没有具体的条目

转载 作者:行者123 更新时间:2023-11-29 23:08:26 24 4
gpt4 key购买 nike

我确信我的标题还有很多不足之处,但让我尝试解释一下这个问题。

我有一个像这样的表帐户:

+----------+-----------+-----------+
| 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

如有任何帮助,我们将不胜感激。

最佳答案

您需要在子查询中使用 group by 子句,如下所示:

选择*FROM 账户 AS aWHERE(从包中选择 * 作为 p,其中 p.start_date >= NOW() 且 p.end_date <= NOW() 或 p.end_date = '0000-00-00' 或 ISNULL(p.end_date)))和 p。 acc_id = a.id AND package_id IN(15,25) GROUP BY package_id 计数(package_id) = 1 )

关于MySQL 一对多,没有具体的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com