Select the first row in a join of two tables in one statement

后端 未结 8 1820
名媛妹妹
名媛妹妹 2020-12-29 12:59

I need to select only the first row from a query that joins tables A and B. On table B exist multiple records with same name. There are not identifiers in any of the two tab

8条回答
  •  粉色の甜心
    2020-12-29 13:35

    Using a GROUP BY may get you part way there, but beware. If you do something like this:

    Select A.NAME, min(B.DATA1), min(B.DATA2) 
    From A Inner Join B on A.NAME = B.NAME 
    Group by A.NAME;
    

    You will get the result you are looking for:

      NAME      DATA1   DATA2
      sameName   1        2    
      otherName  5        7
    

    But only because of the data you are testing with. If you change the data, so that instead of:

    otherName  8        9
    

    you had:

    otherName  8        4
    

    It would return:

      NAME      DATA1   DATA2
      sameName   1        2    
      otherName  5        4
    

    Note that otherName does not return DATA1 and DATA2 from the same record!

    Update: A self-join with a comparison on one of the data values may help you, such as:

    SELECT a.*, b.* FROM a,b 
       LEFT JOIN b b2 ON b.name = b2.name AND b.data2 < b2.data2 
       WHERE a.name = b.name AND b2.data2 IS NOT NULL;
    

    However, this will only work if the values in DATA2 are unique per NAME.

提交回复
热议问题