sql question - outer join seems not to work

前端 未结 3 803
无人共我
无人共我 2021-01-24 06:38

using: sql server

Here is what I am trying to accomplish. I have two tables one with 70 companies (company info, etc) and one table recording the incident numbers of tho

相关标签:
3条回答
  • 2021-01-24 06:53

    Even if I don't know which relation holds which columns in your example, I'm pretty sure you actually want to do this:

    FROM TS_COMPANIES LEFT OUTER JOIN TTS_INCIDENTS
      ON TS_COMPANIES.TS_ID = TTS_INCIDENTS.TS_COMPANYID
     AND TS_ACTIVEINACTIVE = 0 
     AND (TS_INCIDENTTYPE = 10 OR TS_INCIDENTTYPE = 11)
    

    i.e. select from companies and left outer join incidents to the companies, using the incident predicates as left outer join criteria, not as select criteria.

    Note, in most RDBMS, a RIGHT OUTER JOIN usually has a heavy performance impact and should be avoided if possible (don't remember where I've read this. Might be an outdated fact).

    0 讨论(0)
  • 2021-01-24 06:59

    If the WHERE clause is against the outer table in the JOIN, it effectively makes the JOIN an INNER JOIN (this is actually a very common mistake). It's hard to tell which table your WHERE clause criteria works against, since you don't qualify the tables.

    However, my guess is you need to make the WHERE clauses a condition of the JOIN. Something like this:

    SELECT 
        count(*) AS total_num, 
        TS_NAME 
    FROM 
        TTS_INCIDENTS 
        LEFT OUTER JOIN TS_COMPANIES ON 
            TS_COMPANIES.TS_ID=TTS_INCIDENTS.TS_COMPANYID 
            AND TS_ACTIVEINACTIVE = 0 AND (TS_INCIDENTTYPE=10 OR TS_INCIDENTTYPE=11) 
    GROUP BY 
        TS_NAME 
    ORDER BY 
        TS_NAME 
    
    0 讨论(0)
  • 2021-01-24 07:02

    You need make to corrections:

    • change the RIGHT OUTER JOIN to a LEFT JOIN.
    • add an OR TTS_INCIDENTS.TS_COMPANYID is null to the WHERE clause

    modifying the join is going to put the priority on all COMPANIES, instead of all INCIDENTS, as you have it now.
    modifying the WHERE clause will allow Comapnies with NO INCIDENTS to also show-up in the list.

    0 讨论(0)
提交回复
热议问题