我有两个表:Tracking
和Files
。
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语句错误。
答案 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