以下查询正确地按预期方式提取数据,但左表与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