2012-08-05 85 views
0

我有兩個表:TrackingFilesMYSQL - 僅在兩個表都有條目時才顯示結果

  • 跟蹤包含大量以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

如果您只想匹配兩個表中存在的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; 
+0

完美地工作。謝謝 – Teeoney 2012-08-06 05:37:03

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 
相關問題