gpt4 book ai didi

SQL - 如何选择所有具有外部(?)条件的相关行

转载 作者:行者123 更新时间:2023-11-29 14:12:55 25 4
gpt4 key购买 nike

我有三个表:

player [id, name]
attribute [id, name]
player_attribute [id, player_id, attribute_id, value]

每个玩家可以有不同的属性,有些甚至没有。现在我需要搜索具有某些属性的玩家,例如所有号码为 11 且名字为 John 的球员。此时我也知道这些属性的 id,我查询的 where 部分看起来像:WHERE (attribute.id, attribute.value) in ((5, '11'), (18, '约翰'))

我必须让所有满足所有请求属性的玩家。

问题是我不知道整个查询应该是什么样子?我试过加入、嵌套选择、分组依据,但我无法使其工作。我总是得到太多或不够的行。

你能帮帮我吗?

编辑感谢 aranid,我找到了一个解决方案:

select player_id from (
select * from player_attribute where (attribute.id, attribute.value) in ((5, '11'), (18, 'John')))
group by player_id
having count(*) = 2

所以,关键字是 having by 正确使用 :)
有什么方法可以将上述查询转换为 JOIN 语句吗?

最佳答案

希望我答对了你的问题。这应该返回所有具有属性 (5, '11') 和另一个具有 (18, 'John')player_id:

Select a1.player_id
From player_attribute a1
Join player_attribute a2 On ( a2.player_id = a1.player_id )
Where a1.attribute_id = 5 And a1.value = '11'
And a2.attribute_id = 18 And a1.value = 'John'

不将这些属性存储在 player 表中的任何特殊原因?

player (id, first_name, last_name, player_number, ...)

这将使此类查询变得更加容易

Select id
From player
Where first_name = 'John' And player_number = 11

关于SQL - 如何选择所有具有外部(?)条件的相关行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3127908/

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