0

、、の2つのテーブル TrackingがありFilesます。

  • 追跡には、track_idを主キーとする多くのフィールドが含まれています。
  • ファイルには、file_id、track_id、filename、および承認済みが含まれます。

track_id明らかにファイルレコードを追跡レコードにリンクしています。同じtrack_idの複数のファイルレコードにすることができます

私がする必要があるのは、承認されていないファイルを含む、追跡中のすべてのレコードのリストを表示することです。

現在、テストのために、3つのファイルが関連付けられている1つの追跡レコードがあります。私の思考プロセスは、次のステートメントで左結合を使用することでした。

   SELECT * 
     FROM tracking 
LEFT JOIN files ON tracking.track_id = files.track_id 
    WHERE (tracking.archived = '0' AND approved = '0') 
 ORDER BY tracking.po_number;

ただし、これにより同じレコードが3回返されます。どこかに一意の句を追加する必要があると思いますが、それが必要だと思うすべての場所で、SQLステートメントエラーが発生します。

4

2 に答える 2

2

両方のテーブルに存在するIDのみを照合する場合は、内部結合を使用する必要があります。重複を避けるために、個別に使用してください

 SELECT distinct [list of columns] 
 FROM tracking, files 
 WHERE tracking.track_id = files.track_id  AND 
       tracking.archived = '0' AND approved = '0'
 ORDER BY tracking.po_number;
于 2012-08-05T22:17:14.113 に答える
1
SELECT    a.*
FROM      tracking a
JOIN      (
          SELECT   track_id
          FROM     files
          WHERE    approved = 0
          GROUP BY track_id
          ) b ON a.track_id = b.track_id
WHERE     a.archived = 0
ORDER BY  a.po_number
于 2012-08-05T22:25:23.173 に答える