0

我有一个这样的查询:

SELECT c.review, u.username, c.date, c.good, c.rate_id, r.rating
FROM comments AS c
LEFT JOIN users AS u
    ON c.user_id = u.user_id
LEFT JOIN items as i
    ON i.items_id = c.item_id
LEFT JOIN master_cat AS m
    ON m.cat_id = i.cat_id
LEFT JOIN ratings as r
    ON r.item_id = c.item_id 
WHERE i.item = '{$item}' AND c.user_id = r.user_id
ORDER by {$sort};  

但这是限制性的。因为如果 WHERE 语句 ( c.user_id = r.user_id) 匹配,我将 JSON 打印出来c.rating。如果没有,它会在我的应用程序中打印出来,它会跳过我需要的数据。

例如,如果它将评论与来自同一用户的评分相匹配,它将对数据进行配对。但有些评论还没有相关的评分(您可以从 1 到 5 评分)。因此,我不想使用不灵活的 WHERE 子句跳过数据,而是想使它有条件并打印出 0 ,稍后我可以说IF 0, print out "not rated"。(这不会在 SQL 中完成,而是在 JAVA 中完成。在 SQL 中,我只需要在MySQL数据库中存储 0。)

我假设我需要放弃WHERE并成为SELECT?

4

1 回答 1

1
LEFT JOIN ratings as r
    ON r.item_id = c.item_id AND c.user_id = r.user_id
WHERE i.item = '{$item}'

该条件放在where子句中时left join会将inner join

于 2012-09-28T18:48:59.750 回答