MYSQL - 仅当两个表都有条目时才显示结果

时间:2012-08-05 22:12:31

标签: mysql sql

我有两个表:TrackingFiles

  • 跟踪包含许多以track_id为主键的字段。
  • 文件包含file_id,track_id,文件名和已批准。

track_id显然将文件记录链接回跟踪记录。可以是同一track_id的多个文件记录

我需要做的是显示跟踪中包含尚未批准的文件的所有记录的列表。

现在进行测试,我有一个跟踪记录,其中包含3个与之关联的文件。我的思考过程是使用左连接以下语句:

   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语句错误。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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