这与我的另一个问题有关: Managing Foreign Keys
我正在尝试加入比赛和不比赛表。
所以我有一份兴趣列表,一个用户列表和一个用户兴趣列表。
我希望查询返回所有兴趣,无论用户是否有兴趣(在这种情况下应该为null),只有user = x。每次我使查询工作时,用户专门具有的唯一匹配兴趣,而不是所有兴趣,无论他们是否拥有它。
答案 0 :(得分:2)
您应该使用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在哪里。
答案 1 :(得分:0)
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 = ?
如果将where条件放在一个不应该记录主表的表上,则将连接从左连接转换为内连接。只有当你搜索不匹配的记录(例如,u.userid为null)时,你应该在左边连接右边的某个地方遇到条件的唯一时间
当然你应该定义要选择的字段,并且永远不要在生产代码中使用select *,尤其是当你有一个连接时,因为它通过网络发送重复信息(重复数据连接领域)并且是浪费由于多种原因,资源和糟糕的编程实践。