简体   繁体   中英

SQL Join Not Exists

I have the following between these two tables, id column and case column

  Left Table                Right Table
| id1 | case#1 |          | case#1 | id1 |  
| id2 | case#1 |          | case#1 | id3 |
| id3 | case#2 |          | case#2 | id1 |

As you can see case#1 is not assigned to id2 on the right table, therefore I would like to pull the (id2, case#1) record from the left table.

You would need to perform an OUTER JOIN with a multiple JOIN condition:

   left_table as l right outer join right_table as r
   on l.id = r.id and l.case_ = r.case_
   where l.id IS NULL;

This will return non-matching rows from the left table

Have you tried a left join?

LEFT OUTER JOIN table ON table1.field1 = table2.field2

Depends on what you want. If you do INNER JOIN, you get the rows that match in Table1 AND Table2. If you do OUTER JOIN, you get all of Table1 and only the matching rows from Table2.

I've used LEFT JOIN and selected the record with NULL id in the Right Table using WHERE clause. See my query and demo below:

SELECT 
      *
FROM LeftTable A
LEFT JOIN RightTable B ON A.id=B.id 
WHERE B.id IS NULL

DEMO HERE

I would use NOT EXISTS operation in that case.

    SELECT  l.id, l.value
    FROM    LeftTable l
    WHERE   NOT EXISTS (SELECT 1 FROM RightTable r WHERE r.id = l.id and r.case_value = l.case_value)

Efficiency comparing and the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL are here

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