我正在尝试加入两个表:表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'
答案 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)。