0

テーブル A とテーブル B の 2 つのテーブルを結合しようとしています。テーブル A には各行に一意の ID があり、テーブル B には対応する ID がありますが、テーブル B では ID が複数回表示される可能性があります。

内部結合を試みるたびに、テーブル B が原因で行が重複するため、それらの重複なしで結合するにはどうすればよいか疑問に思っています。

基本的に、テーブル A の各行に対してテーブル B から 1 つのレコードのみが必要ですが、それは発生していません。

編集:

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 が複数ある場合は、最も高い ID を持つ b が結合されます。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 に答える