Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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 - Fatal编程技术网

Sql 有没有一种连接两个表的有效方法?

Sql 有没有一种连接两个表的有效方法?,sql,Sql,我有一个表,用于存储成对用户之间关系的详细信息: {user1, user2} 以及关于用户如何查看服务的表格: {user, review} 我想要一张包含以下内容的桌子: {user1, user1_review, user2, user2_review} 我通过1)创建一个具有别名的审查产品来对测试数据进行分析,以给出: user1, review1, user2, review2 1, good, 2, poor 1, good, 3, great 2, poor, 1, good

我有一个表,用于存储成对用户之间关系的详细信息:

{user1, user2}
以及关于用户如何查看服务的表格:

{user, review}
我想要一张包含以下内容的桌子:

{user1, user1_review, user2, user2_review}
我通过1)创建一个具有别名的审查产品来对测试数据进行分析,以给出:

user1, review1, user2, review2
1, good, 2, poor
1, good, 3, great
2, poor, 1, good
2, poor, 3, great
3, great, 1, good
3, great, 2, poor
然后2)将其与user relationships(用户关系)表连接起来,最后得到一个表,该表仅显示了那些拥有关系的用户对,以及他们对服务的看法

这工作得很好,但我无法将其放大。实际的审阅表是700MB的文本文件,在运行查询以创建产品时,我的应用程序内存不足,其中大部分将在第2阶段中删除


有没有其他方法可以让我组织起来实现我想要的目标?

不要创建一个巨大表格的叉积-如果优化器不知道如何避免执行您让它执行的操作,它的运行速度会非常慢

您需要使用reviews表的两个别名连接关系表:

SELECT user1, r1.review AS user1_review, user2, r2.review AS user2_review
  FROM relationship AS r0
  JOIN review AS r1 ON r0.user1 = r1.user
  JOIN review AS r2 ON r0.user2 = r2.user
确保你有适当的索引。这将位于Review表的User列上,并且可能以Relationship表中的每个User列作为前导列进行索引(这对列上可能有一个唯一的索引,例如(
user1
user2
),按此顺序;然后还需要
user2
上的索引)


你会说——忘了表演吧;除了将其存储在常规索引表中之外,没有一种性能更好的处理方法。创建表是为了提高性能。CSV文件不提供性能作为选项。

您说700MB作为文本文件,但数据现在是否存储在真正的dbms表中?表定义、索引等?您使用的是什么数据库?有索引吗?在R中使用sqldf包。没有索引只是以CSV格式存储的纯文本。Umm。。。那为什么不加入第二阶段呢?中间表很少有助于提高查询性能。您通常希望尽快过滤掉尽可能多的无关数据。这是什么关系数据库管理系统?这应该不会有问题。如果查询的是所有用户关系和评论,那么索引当然可能不会有好处,这取决于RDBMS。是的;索引是DBMS特有的。我认为这包含在“适当索引”中。如果DBMS不使用特定的索引,那么它是不合适的。