【问题标题】:How to handle many-to-many relationships in a single sql query?如何在单个 sql 查询中处理多对多关系?
【发布时间】:2015-07-20 18:35:35
【问题描述】:

我整个上午都在运行 SQL 调用,但没有获得想要返回的正确类型的数据。我做了一些搜索,发现了一些关于加入 2 个表的信息,但没有从表中提取的信息,也没有从表中提取的信息。措辞可能会让人感到困惑,所以我制作了一张我想要获得的信息的图表。

我尝试过类似的东西,

select * from Users 
left join UserLibs on UserLibs.userId = Users.UserId
WHERE Users.username='testname'

然而,这并没有给我图书馆的名字。

然后我厌倦了将列与另一个表和列连接起来。

select * from users
left join UserLibs on userLibs.userId = Users.UserId AND left join Libraries on  UserLibs.libraryId = Libraries.libraryName
where Users.username='test';

这也没有产生结果,只是错误。对此的任何帮助都会很棒。

更新

我只是想添加适合我情况的最终解决方案。

SELECT Users.userId, Users.username, Users.editLibraries, Users.editAnnouncements, Users.editServices, 
   Users.editNormalHours, Users.editSpecialHours, Users.editUsers, Users.editSemesters, 
   Libraries.libraryName, LibraryDepartment.departmentName
    FROM Users
    LEFT JOIN UserLibs on Users.userId = UserLibs.userId
    LEFT JOIN Libraries on UserLibs.libraryId = Libraries.id
    LEFT JOIN UserDepts on Users.userId = UserDepts.userId
    LEFT JOIN LibraryDepartment on UserDepts.departmentId = LibraryDepartment.ldId
    WHERE Users.username='testname';

【问题讨论】:

  • and left join 完全是非法的。但这就是你必须做的,就像它在你的图表中一样。`从users中选择,加入 -> 用户库,加入 -> 库

标签: php mysql sql database mysql-error-1064


【解决方案1】:

您不使用 AND 来执行多个连接。您只需继续加入表格即可。您可以加入尽可能多的人。例如:

select *
from users
left join userlibs
on users.userid=userlibs.userid
left join libraries
on userlibs.libraryid=libraries.libraryid
where username='test';

【讨论】:

  • 不是所有返回的行都包含相同的用户信息吗?
  • @nickb 否。如果用户名 'test' 映射到 libraryid 6 即“Main”和 libraryid 10 即“Remote”,您将获得两条记录,每个映射一个。
  • 对,在一行中,您将拥有用户名测试的所有数据,以及信息 6,Main。然后,在下一行中,您将获得用户名测试的所有数据,以及信息 10,远程。
  • @kainaw 这工作得很好。我还不能接受答案,但这正是我想要做的。出于某种原因,我认为在每个额外的连接之间我必须有一个 AND。唯一的问题是图书馆和部门 ID 现在出现了 2 次。
  • 正确。来自表用户的数据不会改变,但表库和用户库的数据会改变。因此,行没有相同的信息,但会有列具有相同的信息。为避免这种情况,您不能要求每个用户多行(因为用户有多个库)。
猜你喜欢
  • 2021-03-22
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-18
相关资源
最近更新 更多