我已经尝试了这两个并继续获得每个信用数据条目的重复:
SELECT DISTINCT * FROM
FROM `mediaDATA`
LEFT JOIN media_creditsDATA ON mediaDATA.id = media_creditsDATA.media_id
SELECT *
FROM `mediaDATA`
LEFT JOIN media_creditsDATA ON mediaDATA.id = media_creditsDATA.media_id
Run Code Online (Sandbox Code Playgroud)
首先,使用distinct *是违反直觉的,您实际上是在选择表中的每一行,然后消除重复的行.尽量避免使用它.
因为你已经尝试过,distinct它消除了你从表中重复数据开始的可能性.看着你的截图我认为行不重复.它们在某些列上可能相同但不能完全相同.例如.
media:
id name
----------- ---------------
1 mediaA
2 mediaB
3 mediaC
media_creditsDATA:
media_id credit_id name
----------- ----------- ---------------
1 1 good credit
1 2 ok credit
2 3 bad credit
3 4 no credit
Run Code Online (Sandbox Code Playgroud)
如果你执行以下sql distinct与否,结果是相同的:
SELECT *
FROM media
INNER JOIN media_creditsDATA ON media.id = media_creditsDATA.media_id
Run Code Online (Sandbox Code Playgroud)
结果:
id name media_id credit_id name
----------- --------------- ----------- ----------- ---------------
1 mediaA 1 1 good credit
1 mediaA 1 2 ok credit
2 mediaB 2 3 bad credit
3 mediaC 3 4 no credit
Run Code Online (Sandbox Code Playgroud)
如果只查看结果表中的前三列,那么确定存在重复记录,但是如果查看所有列则不会.如您所见,媒体表与media_creditsDATA表有一对多的关系.结果表具有共享相同列的子集但没有重复记录的记录.
所以我认为这种情况下的问题不在于您如何过滤结果.例如,您在media_creditsDATA表中寻找的信用记录的子集是什么?或者你可能不关心,你只记录每个媒体记录的最高credit_id.
SELECT *
FROM media
INNER JOIN (
select media_id, max(credit_id) as highest_credit_id from media_creditsDATA
group by media_id )media_creditsDATA ON media.id = media_creditsDATA.media_id
Run Code Online (Sandbox Code Playgroud)
你得到:
id name media_id highest_credit_id
----------- --------------- ----------- --------------
1 mediaA 1 2
2 mediaB 2 3
3 mediaC 3 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2790 次 |
| 最近记录: |