gpt4 book ai didi

php - 查询多对多关系 - mySQL

转载 作者:行者123 更新时间:2023-11-29 03:17:23 25 4
gpt4 key购买 nike

我有以下表格,表格A和表格B

表A(用户)

userid    name
--------------------
1 Sam
2 David

表 B(业余爱好者)

hobbyid   hobby
--------------------
1 singing
2 drawing

我有一个桥接表(多对多关系)

表 C(用户爱好)

userid    hobbyid
--------------------
1 1
2 2
1 2

我想查询一个条件,我想知道哪个用户的爱好等于“绘画”(hobbyid 2)而不是“唱歌”(hobbyid 1)。 如何在没有子查询的情况下实现这一目标

我尝试了以下查询

SELECT * 
FROM hobbylist
JOIN user_hobby AS uh
ON hobbylist.hobbyid = uh.hobbyid
JOIN users AS us
ON us.userid = uh.userid
WHERE hobby = "drawing"
AND hobby <> "singing"

作为上述查询的结果,我仍然得到了两个用户。它应该只显示 user = David。

如何在不使用子查询的情况下实现这一点

最佳答案

  • 您可以根据用户 ID 和名称分组依据。这会将结果聚合到特定用户的单行中。
  • 现在,我们可以使用 HavingSum() 来过滤掉大小写。 Sum(hobby = 'drawing') 对于爱好绘画的用户来说是积极的。对于完全没有唱歌爱好的用户,Sum(hobby = 'singing') 将为零。

尝试以下操作:

SELECT us.userid,
us.name
FROM hobbylist
JOIN user_hobby AS uh
ON hobbylist.hobbyid = uh.hobbyid
JOIN users AS us
ON us.userid = uh.userid
GROUP BY us.userid,
us.name
HAVING Sum(hobby = 'drawing')
AND Sum(hobby = 'singing') = 0

关于php - 查询多对多关系 - mySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880147/

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