1

我有这个 MySQL 请求:

SELECT * 
FROM candy 
RIGHT JOIN candytype ON candy.user_id = 1 AND candytype.candy_id = candy.id;

在我的数据库中,一切都显示了,但我看到相同的糖果行显示了两次,因为一种糖果有两种类型。有没有一种方法,如果它出现一次,MySQL 就不会在结果中再次显示它?

它只是没用,我认为它使我的数据库工作得更多。我只是在寻找一种过滤掉的方法...

4

3 回答 3

1

如果你想要任何旧类型,你可以这样做(这里我猜的是列名):

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;
于 2013-11-08T18:38:34.143 回答
1

以下是一些解决方案:

  1. 用于WHERE过滤掉不需要的糖果类型。

    SELECT *
    FROM candy
    RIGHT JOIN candytype ON candy.user_id = 1 AND candytype.candy_id = candy.id
    WHERE candytype.type = 'lolipop';
    
  2. 您可能会使用一个GROUP BY子句(但要小心,因为它将包含相同值的所有行分组,在这种情况下具有相同的user_idand 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;
    
于 2013-11-08T18:39:10.700 回答
0

我只需要使用 DISTINCT。

SELECT DISTINCT candy.id, candy.name
FROM candy
RIGHT JOIN candytype
ON candy.user_id = 1
AND candytype.candy_id = candy.id;
于 2013-11-13T22:45:55.530 回答