0

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

每当我尝试内部连接时,我都会因为表 B 而得到重复的行,所以我想知道如何在没有这些重复的情况下加入。

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

编辑:

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'

4

2 回答 2

1

这会将 a 与具有最新日期的相应 b 连接起来,如果有多个 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'
; 
于 2012-10-14T01:12:01.697 回答
0

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

于 2012-10-14T00:47:01.860 回答