Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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中有两个“连接”的不需要的结果_Mysql_Sql - Fatal编程技术网

Mysql SQL中有两个“连接”的不需要的结果

Mysql SQL中有两个“连接”的不需要的结果,mysql,sql,Mysql,Sql,我目前的数据库有问题。我有一张电影评论表,一张正面评论表和另一张负面评论表。最后一个链接到审阅的id 以下是正表和负表: 我想得到这个结果: SELECT positives.libelle AS positive, negatives.libelle AS negative FROM reviews LEFT JOIN positives ON positives.review_id = reviews.id LEFT JOIN negatives ON negatives.review_id

我目前的数据库有问题。我有一张电影评论表,一张正面评论表和另一张负面评论表。最后一个链接到审阅的id

以下是正表和负表:

我想得到这个结果:

SELECT positives.libelle AS positive, negatives.libelle AS negative FROM reviews LEFT JOIN positives ON positives.review_id = reviews.id LEFT JOIN negatives ON negatives.review_id = reviews.id WHERE reviews.id = 1 
但我有一个:

以下是获得此结果的SQL代码:

SELECT positives.libelle AS positive, negatives.libelle AS negative FROM reviews LEFT JOIN positives ON positives.review_id = reviews.id LEFT JOIN negatives ON negatives.review_id = reviews.id WHERE reviews.id = 1 

您想要的结果并不是真正的关系格式,因为给定行上的列值实际上彼此无关

MySQL不支持完全连接,因此我建议使用union all和row_number枚举行,并通过group by将它们组合在一起:

SELECT MAX(positive) as positive), MAX(negative) as negative)
FROM ((SELECT p.review_id, p.libelle as positive, NULL as negative,
              ROW_NUMBER() OVER (PARTITION BY p.review_id ORDER BY id) as seqnum
       FROM positives p
       WHERE p.review_id = 1
      ) UNION ALL
      (SELECT n.review_id, NULL, n.libelle,
              ROW_NUMBER() OVER (PARTITION BY n.review_id ORDER BY id) as seqnum
       FROM negatives n
       WHERE n.review_id = 1
      ) 
     ) pn
GROUP BY review_id, id
ORDER BY review_id, id;

注意:如果没有正面和负面的评论,这将不会返回任何行。如果需要考虑的话,您可以合并一个左联接。

如果您不需要有关reviewer的任何信息,为什么要将表与reviewer联接?只需按review_id=1限制表格

下面的查询并不能完全满足您的需求,但是,可能会对您的问题有所帮助。认为联合是更有效率的加入。如果可以使用Union,请避免使用Join

您必须使用审阅者id完全退出加入