这关系到我的其他问题: Managing Foreign KeysMySQL的 - 加入比赛和非比赛
我想参加比赛和非比赛的表。
所以我有一个兴趣列表,用户列表和用户兴趣列表。
我希望查询返回所有兴趣,无论用户是否有兴趣(在这种情况下应该为null),只有用户= x的地方。我每次得到查询时,都会查询用户特有的唯一匹配的兴趣,而不管他们是否拥有所有兴趣。
这关系到我的其他问题: Managing Foreign KeysMySQL的 - 加入比赛和非比赛
我想参加比赛和非比赛的表。
所以我有一个兴趣列表,用户列表和用户兴趣列表。
我希望查询返回所有兴趣,无论用户是否有兴趣(在这种情况下应该为null),只有用户= x的地方。我每次得到查询时,都会查询用户特有的唯一匹配的兴趣,而不管他们是否拥有所有兴趣。
SELECT *
FROM interests i
LEFT JOIN userinterests ui ON i.interestID = ui.interestID
LEFT JOIN users u ON ui.userID = u.uiserID
and u.userID = ?
如果你把在那里的条件上不应该有记录inteh主要tbale一个表,你转换从左侧联接到一起的内连接。唯一一次你应该有一个条件,在左边加入的右边的某个事件中,当你搜索的记录不匹配时(例如,u.userid为空)
当然,您应该定义要选择的字段,并且绝对不要在生产代码中使用select *,特别是在有连接的情况下,因为它会通过网络发送重复的信息(重复数据连接加入域),浪费资源和糟糕的编程出于多种原因的练习。
你还是使用LEFT JOINS
喜欢的东西
SELECT *
FROM interests i LEFT JOIN
userinterests ui ON i.interestID = ui.interestID LEFT JOIN
users u ON ui.userID = u.uiserID
WHERE userID = ?
其中用户ID,你正在寻找。
MySQL中的'LEFT JOIN'代表'LEFT OUTER JOIN'。 – 2010-04-05 18:03:24
由于某种原因我无法工作。我确实发现这可行,但它可能不是最好的。 SELECT * FROM 利益 LEFT JOIN user_interests UI在ui.interest_id = interests.interest_id 其中USER_ID = '1' UNION SELECT * FROM利益 LEFT JOIN user_interests UI在ui.interest_id = interests.interest_id – jwzk 2010-04-05 18:20:49
我想选择*仅仅是为了例子的缘故,我绝对不会使用它。但是,我不确定这是如何回答我的问题?我需要两个行和不匹配的行,这就是为什么我认为我可能只能做联合。 – jwzk 2010-04-05 19:53:50
这应该会给你做和不匹配的行。这是左连接的阴谋。它会提供来自INeterests的所有记录,如果有用户附加到这些兴趣上,它也将显示它们。 – HLGEM 2010-04-05 20:36:20
完美!对不起,我猜我错过了AND而不是WHERE,因为代码看起来一样。谢谢。 – jwzk 2010-04-06 14:09:45