網絡首先,使用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
如果執行與distinct
或不結果如下的sql是一樣的:
SELECT *
FROM media
INNER JOIN media_creditsDATA ON media.id = media_creditsDATA.media_id
結果:
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
如果僅看在前三列結果表格,然後確定有重複的記錄,但是如果您查看所有列,則不能。正如您所看到的,媒體表具有與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
你:
id name media_id highest_credit_id
----------- --------------- ----------- --------------
1 mediaA 1 2
2 mediaB 2 3
3 mediaC 3 4
請注意,在標準化數據集「DISTINCT *」中是oxymoronic – Strawberry
有關更多幫助,請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-看起來對我來說是一個非常簡單的sql查詢 – Strawberry
你可以提供一些示例數據,以及mediaDATA表和media_creditsDATA的外觀嗎? –