2012-09-27 79 views
-2

我有一张如下所示的表格。用SELECT语句忽略重复的行

一个表用于存储水果,另一个用于存储水果的类型。

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 
+0

请显示您的代码。 – hims056

+0

SELECT fruits。* FROM fruits inner join type on type.fruit_id = fruits.fruit_id – user1093513

+0

我很抱歉我的错误我想我没有正确格式化我的排队 – user1093513

回答

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

写SQL会说:-)

“告诉我所有的水果,其中一类存在”:

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

您可以使用DISTINCT忽略重复行像这样的:

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

See this SQLFiddle

+0

与INNER JOIN的结果是一样的,我认为效率更高只是看看这个问题在stackoverflow(http://stackoverflow.com/questions/2726657/inner-join-vs-left-join-performance-in-sql -服务器)。这并不意味着你的答案是完全伟大的:) – Amedio

+1

@Amedio尼斯点。更新了答案。 – hims056

+0

我会纠正自己“......这并不意味着你的答案是错误的,是完全伟大的......” – Amedio

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 
1

您正在获得重复结果,因为此刻执行内部连接时,它会给出数据之间的配对,所以正常情况下fruit会多次出现。

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

希望这会有所帮助。

+0

非常感谢你 – user1093513