我有这个 MySQL 请求:
SELECT *
FROM candy
RIGHT JOIN candytype ON candy.user_id = 1 AND candytype.candy_id = candy.id;
在我的数据库中,一切都显示了,但我看到相同的糖果行显示了两次,因为一种糖果有两种类型。有没有一种方法,如果它出现一次,MySQL 就不会在结果中再次显示它?
它只是没用,我认为它使我的数据库工作得更多。我只是在寻找一种过滤掉的方法...
如果你想要任何旧类型,你可以这样做(这里我猜的是列名):
SELECT candy.id, candy.name, min(candytype.type)
FROM candy
RIGHT JOIN candytype
ON candy.user_id = 1
AND candytype.candy_id = candy.id GROUP BY candy.id;
如果你想要一排/糖果,但你想查看所有可以做的类型:
SELECT candy.id, candy.name, GROUP_CONCAT(candytype.type)
FROM candy
RIGHT JOIN candytype
ON candy.user_id = 1
AND candytype.candy_id = candy.id GROUP BY candy.id;
以下是一些解决方案:
用于WHERE
过滤掉不需要的糖果类型。
SELECT *
FROM candy
RIGHT JOIN candytype ON candy.user_id = 1 AND candytype.candy_id = candy.id
WHERE candytype.type = 'lolipop';
您可能会使用一个GROUP BY
子句(但要小心,因为它将包含相同值的所有行分组,在这种情况下具有相同的user_id
and candy_id
):
SELECT *
FROM candy
RIGHT JOIN candytype ON candy.user_id = 1 AND candytype.candy_id = candy.id
GROUP BY candy.user_id, candytype.candy_id;
我只需要使用 DISTINCT。
SELECT DISTINCT candy.id, candy.name
FROM candy
RIGHT JOIN candytype
ON candy.user_id = 1
AND candytype.candy_id = candy.id;