简体   繁体   中英

Return number of related records for the results of a query

I have 2 related tables, Tapes & Titles related through the Fields TapeID Tapes.TapeID & Titles.TapeID

I want to be able to query the Tapes Table on the Column Artist and then return the number of titles for each of the matching Artist records

My Query is as follows

SELECT Tapes.Artist,COUNT(Titles.TapeID) 
FROM Tapes 
INNER JOIN Titles on Titles.TapeID=Tapes.TapeID 
GROUP BY Tapes.Artist 
HAVING TAPES.Artist LIKE <ArtistName%>"

The query appears to run then seems to go into an indefinite loop I get no syntax errors and no results

Please point out the error in my query

Here are two likely culprits for this poor performance. The first would be the lack of index on Tapes.TapeId . Based on the naming, I would expect this to be the primary key on the Tapes table. If there are no indexes, then you could get poor performance.

The second would involve the selectivity of the having clause. As written, MySQL is going to aggregate all the data for the group by and then filter out the groups. In many cases, this would not make much of a difference. But, if you have lots of data and the condition is selective (meaning few rows match), then moving it to a where clause would make a difference.

There are definitely other possibilities. For instance, the server could be processing other queries. An update query could be locking one of the tables. Or, the columns TapeId could have different types in the two tables.

You can modify your question to include the definition of the two tables. Also, put explain before the query and include the output in the question. This indicates the execution plan chosen by MySQL.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM