The kind of information relationship you're describing is normally handled with a Relate in ArcGIS. If your three tables are set up with a correct relate, you can click on a line and it will then show all matching records from the other two tables. But this is more a display/access of information rather than a use/analyze. In order to solve the specific problem you're addressing, I can think of one (untested) solution right off. Unfortunately it's manual, brute force in a way, and probably not very efficient.
First, you would need to run Make Query Table on your clean and inspect tables with the line ID as the key field. This addresses the many-to-many issue by creating a table record for all possible combinations of the two table's records. Obviously this generates a huge number of records - if a line has six cleans and four inspects, you get 24 records.
Once you have that table, you could do an attribute select with SQL to determine the target combinations - ie all records where clean.date and inspect.date are within 30 days of each other. I don't know the exact syntax off the top of my head, but it would be something like absolute value of datediff(d,clean.date,inspect.date) < 30. This could/would still produce multiple records for the same line - say if it was inspected 17 days before and 23 days after being cleaned. So from that selection, either by exporting to a new table or using another select from the selection, you'd then want to grab just the unique occurences of line ID.
Once you have that selection, you can again export it to a new table (pass) or if you really wanted to combine it all into a massive single SQL statement used to select records from your line table. Since that involves nested queries, everything has to be in a geodatabase for it to have a chance of working though. At any rate, you'd have your list of line IDs that have been cleaned and inspected within 30 days of each other, and you can then either get that as an attribute in the line table or use it to extract the needed lines to symbolize however you want. The whole process could be modified to also target lines cleaned but not inspected, inspected but not cleaned, or neither inspected or cleaned, so you could create a full map showing all four possible conditions.
This is the foundation I'd start with. It would probably have to be refined to a workable process and then turned into a script or model to be run on any kind of regular or repetative basis. Someone else may know of a more elegant solution and if it's in an SDE you may have other options as mapBaker alludes to.