gpt4 book ai didi

sql - postgreSQL 查询 - 在记录的任何字段中查找 id 的存在

转载 作者:行者123 更新时间:2023-11-29 12:31:43 27 4
gpt4 key购买 nike

我有两个表,如下所示

工具:

id | part name
---------------
0 | hammer
1 | sickle
2 | axe

:

 personID | ownedTool1 | ownedTool2 | ownedTool3 ..... ownedTool20
------------------------------------------------------------------
0 | 2 | 1 | 3 ... ... 0

我正在尝试了解有多少人拥有特定工具。一个人不能拥有同一工具的多个副本。

我能想到的唯一方法就是这样

SELECT COUNT(*)
FROM tools JOIN people ON tools.id = people.ownedTool1.id OR tools.id = people.ownedTool2 ... and so on
WHERE tools.id = 0

获取拥有锤子的人数。我相信这会起作用,但是,这涉及在查询中包含 20 个 OR 语句。肯定有更合适的方式来形成这样的查询,我有兴趣了解如何做到这一点。

最佳答案

首先,您不应该有 20 列,每列都可能包含一个 ID。您应该正确地建立规范化模式。如果一个工具只能属于一个用户 - 但一个用户可以拥有多个工具,您应该建立一个一对多关系。每个工具都会在其行中有一个用户 ID,该用户 ID 映射回它所属的用户。如果一个工具可以属于一个或多个用户,您将需要建立一个多对多关系。这将需要一个包含 user_id 行到 tool_id 映射的中间表。像这样适本地设置架构将使您要执行的查询变得微不足道。

在您的特定情况下,似乎一个用户可以拥有许多工具,并且一个工具可以被许多用户“共享”。对于多对多关系,您只需计算该中间表中具有所需 tool_id 的行数。

像这样:

SELECT COUNT(ID) FROM UserTools Where ToolID = @desired_tool_id

用谷歌搜索我加粗的术语应该能让您找到正确的方向。如果您坚持使用该架构,那么您指出的方式是唯一的方法。

关于sql - postgreSQL 查询 - 在记录的任何字段中查找 id 的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104560/

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