gpt4 book ai didi

mysql - 用自连接替换嵌套的选择查询

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

我最近在这里问了一个关于 SQL 查询的问题:Trouble wrapping head around complex SQL delete query

我现在明白,我正在尝试做的事情太复杂了,无法通过单个查询或什至多个查询来完成,而没有某种方法可以在两者之间保留结果。因此,我决定创建一个 bash 脚本(最终结果将与 cronjob 相关,因此 bash 是最直接的选择)。

考虑下表:

关联客户端:

+-----------+-----------------+
| Client_id | Registration_id |
+-----------+-----------------+
| 2 | 2 |
| 3 | 2 |
| 3 | 4 |
| 4 | 5 |
| 3 | 6 |
| 5 | 6 |
| 3 | 8 |
| 8 | 9 |
| 7 | 10 |
+-----------------------------+

我想做的是选择所有Registration_id Client_id 特定 Registration_id 关联的 Client_id 列表。

虽然我不太熟悉 SQL,但我发现这个查询相对简单:

SELECT `Registration_id` FROM `AssociatedClient` ac1
WHERE ac1.`Client_id` IN
(SELECT `Client_id` FROM `AssociatedClient` ac2
WHERE ac2.`Registration_id` = $reg_id);

其中 $reg_id 只是一个 bash 变量。

这可行,但我希望看到它通过自连接 完成,因为它看起来更好,尤其是在出现大量字符困惑的 bash 脚本中。恐怕我的 SQL 技能还达不到那么远。

最佳答案

如果我没理解错的话,您应该可以像这样进行简单的自连接:

SELECT ac1.registration_id
FROM associatedclient ac1
JOIN associatedclient ac2 ON ac2.client_id = ac1.client_id
WHERE ac2.registration_id = $reg_id

所以你正在做的是扫描一次表,在 client_id 匹配的地方将它连接到自身。然后,您将连接的行限制为表的第二个版本具有特定 id 的行,让您在第一个表上有不同的连接排列,然后只需从这些行中选择 registration_id。

因此,以变量值为 6 为例,尝试运行以下语句:

SELECT 
ac1.client_id AS client_id_1
, ac1.registration_id AS reg_id_1
, ac2.client_id AS client_id_2
, ac2.registration_id AS reg_id_2
FROM associatedclient ac1
JOIN associatedclient ac2 ON ac1.client_id = ac2.client_id

您会注意到完整的联接集。然后尝试添加 WHERE 限制并注意哪些行返回。然后最后选择您想要的列。

您可以查看 SQLFiddle我设置 which testing it with a value of 6

关于mysql - 用自连接替换嵌套的选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15109764/

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