Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
重写MySQL的SQL Server查询_Mysql_Sql_Sql Server - Fatal编程技术网

重写MySQL的SQL Server查询

重写MySQL的SQL Server查询,mysql,sql,sql-server,Mysql,Sql,Sql Server,在下面的例子中,我有一个包含作者及其论文的书目表。例如,作者“001”和“003”一起撰写了文章“678” articleId | authorId 123 | 001 123 | 002 345 | 002 345 | 003 345 | 004 678 | 001 678 | 003 我需要根据作者的共同身份选择作者之间的共现。例如,对于上面的表,我需要构造下表: AuthorA | AuthorB 001 | 002 002 | 003 002 | 004 003 | 004 001 |

在下面的例子中,我有一个包含作者及其论文的书目表。例如,作者“001”和“003”一起撰写了文章“678”

articleId | authorId
123 | 001
123 | 002
345 | 002
345 | 003
345 | 004
678 | 001
678 | 003
我需要根据作者的共同身份选择作者之间的共现。例如,对于上面的表,我需要构造下表:

AuthorA | AuthorB
001 | 002
002 | 003
002 | 004
003 | 004
001 | 003
第一个表非常大,大约有1800.000行。当我第一次尝试使用MSSQLServer2008时,第二个表的构建速度很快,但我现在只能使用MySQL。我使用以下查询:

SELECT foo.authorId AS authorA, bar.authorId AS authorB
  FROM
    (SELECT * FROM tblAuthorHasBib) AS foo,
    (SELECT * FROM tblAuthorHasBib) AS bar
  WHERE
    foo.articleId = bar.articleId
  AND
    foo.authorId <> bar.authorId
  GROUP BY foo.authorId, bar.authorId

如何将我的查询重写为与MS SQL一样快?提前感谢您提供的任何指针。

您可以按如下所示编写查询,这样可以避免使用GROUP BY子句和任何内嵌视图

SELECT foo.authorId AS authorA, bar.authorId AS authorB
FROM tblAuthorHasBib foo
JOIN tblAuthorHasBib bar
   ON foo.articleId = bar.articleId 
WHERE foo.authorId != bar.authorId

或者,根据@1osmi的评论,如果您只需要作者的唯一排列,则可以替换!=使用可以编写如下所示的查询,这样可以避免使用GROUPBY子句和任何内嵌视图

SELECT foo.authorId AS authorA, bar.authorId AS authorB
FROM tblAuthorHasBib foo
JOIN tblAuthorHasBib bar
   ON foo.articleId = bar.articleId 
WHERE foo.authorId != bar.authorId

或者,根据@1osmi的评论,如果您只需要作者的唯一排列,则可以替换!=此查询返回作者的所有排列-例如1 | 2和2 | 1。应该对其进行编辑,以返回唯一的组合,如上面示例中的1 | 2。@1osmi是的,但问题中的原始SQL Server查询也是如此。@acatt true,我没有分析第一个查询,只是查看给定输入的结果应该是什么样子。若有人需要过滤掉排列,那个么这个独特的组合问题有多种解决方案。@Andrej我已经修改了我的答案,将1osmi的评论考虑在内。这只是对查询的一个小改动,以给出唯一的排列。此查询返回作者的所有排列,例如1 | 2和2 | 1。应该对其进行编辑,以返回唯一的组合,如上面示例中的1 | 2。@1osmi是的,但问题中的原始SQL Server查询也是如此。@acatt true,我没有分析第一个查询,只是查看给定输入的结果应该是什么样子。若有人需要过滤掉排列,那个么这个独特的组合问题有多种解决方案。@Andrej我已经修改了我的答案,将1osmi的评论考虑在内。这只是对查询的一个小改动,以给出唯一的排列。