sql优化搜索多个
输入参数:组名、用户名sql优化搜索多个,sql,mysql,database,hibernate,Sql,Mysql,Database,Hibernate,输入参数:组名、用户名 输出:书籍列表 当用户名在groupname中时,是否可以使用1条sql语句获取图书列表 问题2:推荐哪本好书来掌握复杂的sql语句?此查询按用户参数给出书籍列表 usertable ---- id, username grouptable ---- id, groupname group_user -------- uid, gid books ---- id, groupname 此外,我认为如果你有组名,你可以使用 SELECT b.id, FROM use
输出:书籍列表 当用户名在groupname中时,是否可以使用1条sql语句获取图书列表
问题2:推荐哪本好书来掌握复杂的sql语句?此查询按用户参数给出书籍列表
usertable
----
id, username
grouptable
----
id, groupname
group_user
--------
uid, gid
books
----
id, groupname
此外,我认为如果你有组名,你可以使用
SELECT b.id,
FROM usertable u
INNER JOIN group_user gu ON gu.uid = u.id
INNER JOIN grouptable g ON g.id= gu.gid
INNER JOIN books b ON b.groupname = g.groupname
WHERE u.username = @user_name
巴士在这两个参数上都有选择,我认为不是很好。此查询将获得
用户组名称的书籍列表
SELECT b.id,
FROM grouptable g
INNER JOIN books b ON b.groupname = g.groupname
WHERE g.groupname = @group_name
只是为了确认,u正在使用内部联接。但同一用户可以有多本不同的书。内部联接表示1个左表联接-1个右表联接(完全联接)。在这种情况下,将列出唯一用户,这是不正确的。。?抱歉,如果我错了,请解释使用Where子句,我在usertable中只保留一行用户名与参数值相同的用户。使用内部联接,我可以获得用户所参与的行数。所以,若用户在5个组中,我得到5行。然后我通过参数@group\u name过滤这些组。此组的“我获取图书”列表。如果仍然不清楚它是如何工作的,只需将“b.id”替换为“*”,并删除所有内部连接和where子句,然后开始逐个添加它们以查看效果。您不应该将两个问题放在一起。。。
SELECT b.id,
FROM usertable u
INNER JOIN group_user gu ON gu.uid = u.id
INNER JOIN grouptable g ON g.id= gu.gid
AND g.group_name = @group_name
INNER JOIN books b ON b.groupname = g.groupname
WHERE u.username = @user_name