【问题标题】:SQL - Select distinct rows and join them with another table to get dataSQL - 选择不同的行并将它们与另一个表连接以获取数据
【发布时间】:2011-07-11 22:51:52
【问题描述】:

我有 2 张桌子:

1) 人(person_id,person_name)

2) 汽车 (car_id, person_id)

我想获取所有拥有汽车且没有重复的人的姓名。

这是我想出的:

SELECT person.person_name, cars.person_id
FROM cars
INNER JOIN person
ON person.person_id=cars.person_id

但我不想重复,所以我需要使用类似这样的东西来合并它:

SELECT DISTINCT person_id FROM cars

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    select person_name from person
    where person_id in ( select person_id from cars )
    

    【讨论】:

    • 这是一个不错的简单答案,如果将name 更改为person_name,它应该可以工作。
    • 感谢@Ben...手指记忆胜过问题的实际阅读:)
    • 你的意思是:select name from person where person_id in ( select distinct person_id from cars )
    • 这将是等效的 - 无需在 IN 子句中指定 distinct。
    【解决方案2】:
    SELECT DISTINCT person.person_name, person.person_id
    FROM cars
    INNER JOIN person
    ON person.person_id=cars.person_id
    

    虽然可能有更多性能更好的选择。

    【讨论】:

    • 重名怎么办?
    • 从技术上讲,如果它是一个不同的person_id,那么它就是一个不同的。那是规范吗?如果是这样,这些答案中的大多数都不符合。
    • _id 是主键,但可能有重复的名称。
    • 我认为你的数据很差。只有 Arthur Frankel 的答案会给你独特的名字。
    【解决方案3】:
    SELECT p.person_id AS person_id, p.name AS name FROM person p, cars c    
    WHERE p.person_id = c.person_id    
    GROUP BY b.brand_id
    

    【讨论】:

      【解决方案4】:
      SELECT DISTINCT(person.person_name) 
      FROM person, cars 
      WHERE person.person_id = cars.person_id
      

      【讨论】:

      • 我也需要人名。我可以这样做吗? SELECT DISTINCT(person.person_name), person.person_id FROM person, cars WHERE person.person_id = cars.person_id
      【解决方案5】:

      试试这个:

      SELECT  p.person_id, p.person_name
         FROM  person p
      WHERE     EXISTS
      (
          SELECT 1
            FROM cars c
          WHERE c.person_id = p.person_id
      )
      

      【讨论】:

        猜你喜欢
        • 2020-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多