Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write subquery inside the OUTER JOIN Statement

Tags:

sql

I want to join two table CUSTMR and DEPRMNT.

My needed is: LEFT OUTER JOIN OF two or more Tables with subquery inside the LEFT OUTER JOIN as shown below:

Table: CUSTMR , DEPRMNT

Query as:

SELECT     cs.CUSID     ,dp.DEPID FROM     CUSTMR cs         LEFT OUTER JOIN (             SELECT                     dp.DEPID                     ,dp.DEPNAME                 FROM                     DEPRMNT dp                 WHERE                     dp.DEPADDRESS = 'TOKYO'         )             ON (                 dp.DEPID = cs.CUSID                 AND cs.CUSTNAME = dp.DEPNAME             ) WHERE     cs.CUSID != '' 

Here the subquery is:

SELECT     dp.DEPID, dp.DEPNAME FROM     DEPRMNT dp WHERE     dp.DEPADDRESS = 'TOKYO' 

Is it possible to write such subquery inside LEFT OUTER JOIN?

I am getting an error when running this query on my DB2 database.

like image 602
YROjha Avatar asked May 08 '12 06:05

YROjha


People also ask

How do you write a subquery in joins?

Rewriting Subqueries as JOINSA subquery using IN can be rewritten with the DISTINCT keyword, for example: SELECT * FROM table1 WHERE col1 IN (SELECT col1 FROM table2); can be rewritten as: SELECT DISTINCT table1.

Can I use inner join in subquery?

Inner Join will execute sub query only once.

How do you write a subquery in a select statement?

Subqueries with the INSERT Statement Subqueries also can be used with INSERT statements. The INSERT statement uses the data returned from the subquery to insert into another table. The selected data in the subquery can be modified with any of the character, date or number functions. The basic syntax is as follows.

Can subquery join tables?

yes, sql works on sets, a subquery returns a set as result, so this is possible.


1 Answers

You need the "correlation id" (the "AS SS" thingy) on the sub-select to reference the fields in the "ON" condition. The id's assigned inside the sub select are not usable in the join.

SELECT        cs.CUSID        ,dp.DEPID FROM     CUSTMR cs         LEFT OUTER JOIN (             SELECT                     DEPID                     ,DEPNAME                 FROM                     DEPRMNT                  WHERE                     dp.DEPADDRESS = 'TOKYO'         ) ss             ON (                 ss.DEPID = cs.CUSID                 AND ss.DEPNAME = cs.CUSTNAME             ) WHERE     cs.CUSID != ''  
like image 165
James Anderson Avatar answered Oct 06 '22 00:10

James Anderson