Skip to content
Advertisement

Selecting records in SQL table if either JOIN statement is satisfied

I have a table of Companies that I’d like to filter to just the records that are referenced from two other tables, Employees and Contracts.

My initial instinct is that I might be able to do something like this:

However, this selects the records that are referenced from both Employees and Contracts tables.

How do I rewrite this query to match records that are referenced from either table?

Advertisement

Answer

I initially put up a buggy version that failed, with LEFT OUTER JOINS. It could have been fixed but it’s actually probably more efficient to use WHERE EXISTS e.g.,

The reason my previous version was buggy, was that it had a join to Employees and Contracts, which meant it would return one row for every one that existed (and indeed, possibly the cross-product of results). Even with a GROUP BY or DISTINCT, it is likely SQL Server would have had to do a lot of work.

The above solution just gets one row per Company, regardless of number of employees or contracts.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement