使用SELECT语句忽略重复的行

时间:2012-09-27 06:49:12

标签: mysql sql join data-modeling

我有一张如下表格。

一个用于存储水果的表和一个用于存储水果的表。

create table fruits(fruit_id int, fruit_name VARCHAR(255));  
create table type(fruit_id int, status VARCHAR(255));

INSERT INTO fruits(fruit_id, fruit_name) 
            values(101, 'Apple'),
                  (102, 'Mango'),
                  (103, 'Lemon'),
                  (104, 'Grape'),
                  (105, 'Orange');

INSERT INTO type(fruit_id, status) 
          values(101, 'Edible');
                (101, 'Sweet'),
                (102, 'Edible'),
                (103, 'Edible'),
                (103, 'Salty'),
                (103, 'Sour'),
                (104, 'Sour');

现在我想要一个如下所示的输出

  Fruit_id    FruitName
    101       Apple
    102       Mango
    103       Lemon
    104       Grape 

我使用了INNER JOIN,但它重复了苹果,柠檬和葡萄的行

SELECT fruits.* 
FROM fruits INNER JOIN type 
ON type.fruit_id = fruits.fruit_id

5 个答案:

答案 0 :(得分:3)

您可以使用DISTINCT忽略重复的行,如下所示:

SELECT DISTINCT F.*
FROM fruits f
INNER JOIN type t ON F.Fruit_id = t.Fruit_id;

See this SQLFiddle

答案 1 :(得分:2)

select f.fruit_id,f.FruitName from 
fruits where fruit_id in(select distinct fruit_id from type)

答案 2 :(得分:2)

写你喜欢的sql: - )

“告诉我所有类型存在的水果”:

select *
from fruits
where exists (
    select *
    from types 
    where types.fruit_id = fruits.fruit_id
)

答案 3 :(得分:1)

SELECT f.fruit_id ,f.fruit_name 
FROM fruits f 
INNER JOIN type t ON f.fruit_id=t.fruit_id 
GROUP BY f.fruit_id,f.fruit_name

SELECT DISTINCT f.fruit_id ,f.fruit_name 
FROM fruits f 
INNER JOIN type t ON f.fruit_id=t.fruit_id 

答案 4 :(得分:1)

您正在获得重复的结果,因为目前要进行内部联接,它会为您提供数据之间的对,因此fruit出现不止一次是正常的。

对于您所拥有的内容,也许可以在DISTINCT(fruits.*)语句中使用SELECT来解决您的问题。

希望这有帮助。