gpt4 book ai didi

mysql - 简单(?)MySQL 查询

转载 作者:行者123 更新时间:2023-11-30 00:35:52 26 4
gpt4 key购买 nike

我对 MySQL 很陌生,并且在查询上已经停留了一段时间。我以为我必须使用子查询,但这样做不起作用,因为它返回多行。这是我到目前为止所得到的:

    SELECT im.fb_id, im.interest_id, i.name
FROM interest_map AS im
LEFT JOIN interests AS i ON i.id = im.interest_id
WHERE i.category = 'Pet supplies'

这为我提供了对“宠物用品”类别感兴趣的所有用户。我想要的是:

  1. 从用户 A 开始
  2. 收集用户 A 在类别 X 下的所有兴趣
  3. 查找具有匹配兴趣的所有其他用户

兴趣不需要显式匹配,这意味着用户 A 可以有兴趣 1、2、4,用户 B 可以有兴趣 2、3、5,并且他们仍然会匹配兴趣 2。

我的表格如下所示:

    users: id, firstname, last_name
interests: id, name, category
interest_map: user_id, interest_id

此外,如果有人知道这种查询的名称,以便我可以阅读其他类似的查询,我将非常感激!

最佳答案

您可以通过将第二个表上的条件移动到 on 来完成此操作。子句:

SELECT im.fb_id, im.interest_id, i.name
FROM interest_map im LEFT JOIN
interests i
ON i.id = im.interest_id AND
i.category = 'Pet supplies';

LEFT JOIN与记录不匹配,它会生成 NULL值(value)。所以,当你说i.cateogry = 'Pet Supplies'时,i.category的值是 NULL并且比较失败。

将条件放入 on条款解决了这个问题。但是,它将保留初始表中的所有行。

我想你真的想要:

SELECT u.id, im.interest_id, i.name
FROM users u left outer join
interest_map im
on u.id = im.user_id LEFT JOIN
interests i
ON i.id = im.interest_id AND
i.category = 'Pet supplies';

这将为每个用户生成一行,并具有适当的兴趣。

关于mysql - 简单(?)MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185057/

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