2012-09-27 75 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