【问题标题】:Ignore repeated rows with SELECT statement使用 SELECT 语句忽略重复的行
【发布时间】:2012-09-18 21:38:04
【问题描述】:

我有一张如下表。

一张放水果,一张放水果。

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

【问题讨论】:

  • SELECT fruits.* FROM fruits 内部连接类型 on type.fruit_id = fruits.fruit_id
  • 对不起,我的错误我认为我的问题没有正确格式化
  • 其实你的要求不清楚。所以每个答案可能会给你不同的结果。

标签: mysql sql join data-modeling


【解决方案1】:

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

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

See this SQLFiddle

【讨论】:

  • 使用 INNER JOIN 的结果是一样的,我认为在 stackoverflow (stackoverflow.com/questions/2726657/…) 上查看这个问题会更有效。这并不意味着您的答案非常棒:)
  • 我会更正自己“……这并不意味着你的答案是错误的,完全很棒……”
  • 我说的是相反的,我说的是我想说的话,你的回答很棒...... :)
  • @Amedio 实际上我首先对 OP 的问题感到困惑。并在 OP 发布他/她的努力后得到它。
【解决方案2】:
select f.fruit_id,f.FruitName from 
fruits where fruit_id in(select distinct fruit_id from type)

【讨论】:

    【解决方案3】:

    像你说的那样写 sql :-)

    “显示所有存在类型的水果”:

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

    【讨论】:

      【解决方案4】:

      您会得到重复的结果,因为在进行内部连接时,它会为您提供数据之间的对,所以fruit 出现多次是正常的。

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

      希望这会有所帮助。

      【讨论】:

        【解决方案5】:
        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 
        

        【讨论】:

          猜你喜欢
          • 2020-03-05
          • 1970-01-01
          • 2011-02-16
          • 1970-01-01
          • 2020-01-03
          • 2018-10-22
          • 1970-01-01
          • 2017-09-13
          • 2013-07-06
          相关资源
          最近更新 更多