以下查詢正確地按預期方式提取數據,但左表與lnk_cat_isrc
表連接並通過該表連接到catalogue
表,如果存在多個項目,則返回重複數據catalogue
從isrc
表具有相同的ISRC代碼:MySQL - 唯一行,僅對應於3個表中的一個
SELECT
isrc.ISRC,
isrc.Track_Name,
isrc.ArtistName,
isrc.TitleVersion,
isrc.Track_Time,
`isrc_performer`.`PerformerName` ,
`performer_category`.`PerformerCategory` ,
`isrc_performer`.`PerformerRole` ,
`isrc`.`isrc_ID`,
`isrc_performer`.`Perf_ID`
FROM `isrc`
LEFT JOIN `isrc_performer` ON (isrc.isrc_ID = isrc_performer.isrc_ID)
LEFT JOIN `performer_category` ON (performer_category.PerfCat_ID = isrc_performer.PerfCat_ID)
LEFT JOIN `lnk_cat_isrc` ON (lnk_cat_isrc.isrc_ID = isrc.isrc_ID)
LEFT JOIN `catalogue` ON (catalogue.ID = lnk_cat_isrc.cat_id)
ORDER BY isrc_ID desc LIMIT 0 , 10
";
我不能isrc
使用group by
,因爲isrc_performer
表可以有不止一個演員到一個ISRC。
所以關係是這樣的: catalogue
表中的幾項從isrc
表中可以有幾個相同的項。反過來,每個isrc
表可在isrc_performer
表中有多個條目。
我想要的是顯示isrc_performer
與每個isrc相關的所有相應數據,但不會重複從catalogue
表中的每個項目。 我也想顯示其餘所有「空」isrcs(那些在isrc_performer
表中沒有任何數據)
你能給我任何想法嗎?
P.S.儘管我並沒有從catalogue
表中抽取任何數據,但我使用它來通過目錄號進行搜索,當用戶爲$where_condition
變量定義搜索條件時,因此我需要將其保留在查詢中。 即$where_condition = "catalogue.Catalogue LIKE '%test%' OR ISRC LIKE '%test%' OR Track_Name LIKE '%test%' OR ArtistName LIKE '%test%' OR TitleVersion LIKE '%test%' OR PerformerName LIKE '%test%' OR PerformerCategory LIKE '%test%' OR PerformerRole LIKE '%test%'";
------ UPD:
試圖以圖形方式表示這3個關係可能變化:
cat1 - isrc1 - performer1
isrc2 - performer1
- performer2
- performer3
cat2 - isrc2 - performer1
- performer2
- performer3
- isrc3 - performer2
- performer4
cat3 - isrc4
- isrc1 - performer1
UPD(添加圖片)
這裏是屏幕打印。正如你在圖片1上看到的那樣,有9行有相同的isrc
數字,但是有三個重複的表演者Jason,David,Paul。
這是因爲3個不同的目錄項具有此確切ISRC與3個不同的表演者逐PIC 2
= 1(ISRC)* 3(目錄)* 3(表演者)= 9行輸出
我只想要的是,Performers
網格將只顯示這isrc
爲每個表演者的3行。
請參閱[我爲什麼應該提供一個用於我認爲是非常簡單的SQL查詢的MCVE](http://meta.stackoverflow.com/questions/333952/why-should-i-提供-AN-MCVE換什麼,似乎對我將要-A-極簡單的SQL查詢) – Strawberry
@Strawberry我已經更新了我的問題 – Elen
所以我想'distinct'沒有解決不了的重複的問題。那麼它不是一個真正的重複問題,而是一個重複的價值prolbme?你不想'看到列值重複?但是,你沒有任何次序會使重複的值有意義。一個預期結果的例子將有助於顯示你現在得到的和你想要的。 – xQbert