请勿将旧学校逗号操作符的语法用于连接操作和新的JOIN关键字语法混合使用。
似乎没有任何条件链接article
和activity
。因此查询会生成一个叉积(笛卡尔积)... article
中的每一行都将与activity
中的每一行匹配。如果这是所需的设置,我们可以添加CROSS
关键字作为未来读者的文档。否则,添加一些条件。
另外,在WHERE子句中需要用于从activitycontent (即activitycontent.languageID = 'no'
)的列的非空值的谓词否定LEFT的outerness JOIN,使其相当于一个内连接。 (通过WHERE子句在这种条件下,则省略LEFT
关键字不会改变结果)。如果我们需要一个外部联接,我们可以重新定位该谓词到外的ON子句加入。)
SELECT article.*
, activity.*
FROM article
JOIN activity
ON 1=1 -- condition that links article to activity should go here
LEFT
JOIN articlecontent
ON articlecontent.articleID = article.id
AND articlecontent.languageID = 'no'
LEFT
JOIN activitycontent
ON activitycontent.activityID = activity.id
AND activitycontent.languageID = 'no'
ORDER BY article.sortDate DESC
LIMIT 3
后续
看在我的答案查询,外连接到activitycontent
表和articlecontent
表看起来毫无意义的。这些只会有可能产生重复的行。如果意图是限制返回的行,则通过删除LEFT关键字将这些行变为INNER JOIN。
SELECT article.*
, activity.*
FROM article
CROSS
JOIN activity
JOIN articlecontent
ON articlecontent.articleID = article.id
AND articlecontent.languageID = 'no'
JOIN activitycontent
ON activitycontent.activityID = activity.id
AND activitycontent.languageID = 'no'
ORDER BY article.sortDate DESC
LIMIT 3
没有一个实际的,具体的规格(最好包括示例数据和预期结果),我们留下猜测应该由该查询返回的结果是什么。
只是不可能建议一个查询,它会返回我们之后的结果......如果我们不知道我们在做什么后。
不要混合显式和隐式'JOIN'查询 - 相反,您应该始终使用显式连接。 – Dai
'article'和'activity'之间的关系是什么?如果查询之间没有定义的JOIN条件,查询就没有意义了。现在你的查询没有一个。 – Dai