Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql优化搜索多个_Sql_Mysql_Database_Hibernate - Fatal编程技术网

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