如何连接表A和表B而不重复表A中的行?

时间:2012-10-14 00:43:38

标签: mysql join

我正在尝试加入两个表:表A和表B.表A每行都有唯一的ID,并且在表B中有相应的ID,但在表B中有ID' s可以多次出现。

每当我尝试内部联接时,由于表B,我得到重复的行,因此我想知道如何在没有这些重复的情况下加入。

基本上我只想从表B中获得表A中每一行的一条记录,但它没有发生。

编辑:

SELECT p.post_title, tt.cntaccess FROM wp_posts as p INNER JOIN wp_top_ten as tt ON p.ID = tt.postnumber WHERE p.post_date > '2000-01-02 00:00:00' AND tt.cntaccess > '10'

2 个答案:

答案 0 :(得分:1)

这将与具有最新日期的相应b加入a,如果有多个b匹配该条件,则b具有最高id。假设b.id和a.id是唯一的(或主键)。

SELECT a.id
     , b.id
     , b.date
  FROM a
  JOIN b
    ON a.id = b.a_id
  LEFT JOIN b AS b2
    ON b.a_id = b2.a_id
   AND (b.date, b.id) < (b2.date, b2.id)
 WHERE b2.id IS NULL
;

这是我尝试将您的表与逻辑一起使用。请注意,我指的是tt.pk.此pk表示预期行为的唯一或主键。您没有显示足够的详细信息来了解此信息。我还没有测试过以下SQL。上面的测试SQL已经过测试。

SELECT p.post_title
     , tt.cntaccess
     , p.ID
     , tt.pk 
  FROM wp_posts AS p
  JOIN wp_top_ten AS tt
    ON p.id = tt.postnumber 
   AND tt.cntaccess > '10'
  LEFT JOIN wp_top_ten as tt2
    ON tt.postnumber = tt2.postnumber 
   AND tt2.cntaccess > '10'
   AND (tt.date, tt.pk) < (tt2.date, tt2.pk) 
 WHERE tt2.postnumber IS NULL 
   AND p.post_date > '2000-01-02 00:00:00'
; 

答案 1 :(得分:0)

您需要使用SELECT语句指定您需要从哪个表中选择哪些字段... 因此,而不是SELECT * FROM...使用SELECT tablea.id, tablea.etc... FROM...而忽略那些您不需要的(在您的情况下,表B中的ID)。