gpt4 book ai didi

MySQL - 从 INNER JOIN 获取记录而不是在日期之间

转载 作者:行者123 更新时间:2023-11-28 23:39:47 25 4
gpt4 key购买 nike

我有两个表

帐户:

+------------+--------+
| accountsid | name |
+------------+--------+
| 1 | Bob |
| 2 | Rachel |
| 3 | Mark |
+------------+--------+

销售订单

+--------------+------------+------------+--------+
| salesorderid | accountsid | so_date | amount |
+--------------+------------+------------+--------+
| 1 | 1 | 2015-12-16 | 50 |
| 2 | 1 | 2016-01-13 | 20 |
| 3 | 2 | 2015-12-14 | 10 |
| 4 | 3 | 2016-02-14 | 35 |
+--------------+------------+------------+--------+

如您所见,这是一个 1-N 关系,其中 Accounts 有很多 Salesorder,而 Salesorder 有 1 个 Account。

我需要检索不再活跃的“旧”帐户。例如,如果某些帐户在 2016 年没有销售订单,则该帐户是不活跃的帐户。

因此,在此示例中,结果将只有 Rachel。

我怎样才能找回这个?我认为它是两者之间的“对立面”,但我不知道该怎么做......

谢谢。

附言。尽管有标题,但我可以在没有 INNER JOIN 的情况下获得它。

最佳答案

您希望实现反连接,在 MySQL 中有三种可能性:

  1. 使用NOT IN:

    SELECT a.*
    FROM Accounts a
    WHERE a.accountsid NOT IN (
    SELECT so.accountsid
    FROM `Sales Orders` so
    WHERE so.so_date >= '2016-01-01'
    )
  2. 使用NOT EXISTS:

    SELECT a.*
    FROM Accounts a
    WHERE NOT EXISTS (
    SELECT *
    FROM `Sales Orders` so
    WHERE so.accountsid = a.accountsid
    AND so.so_date >= '2016-01-01'
    )
  3. 使用外部JOIN:

    SELECT a.*
    FROM Accounts a LEFT JOIN `Sales Orders` so
    ON so.accountsid = a.accountsid
    AND so.so_date >= '2016-01-01'
    WHERE so.accountsid IS NULL

关于MySQL - 从 INNER JOIN 获取记录而不是在日期之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34725580/

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