I have two tables in my SQL Server which I'm trying to join and only get results by filtering using some conditions in where clause. First things first, I have created a sample fiddle here to have a look on my sample data of two tables.
So here my goal is to combine both tables using order number columns and get only the email
column in customer_comment
table excluding the OELINCMT_SQL
table record for lin_cmt_no = 3
. So as an example let's say order number : 186349
in the fiddle's customer_comment
table has 3 records in respective joined OELINCMT_SQL
table. Specifically those are ID =1,2 and 3
which has cmt_sql_no = 1,2 and 3
.So this record should not show in my query results since it has a record for cmt_sql_no = 3
. Now if we take order number : 186350
it only has cmt_sql_no = 1 and 2
. So this order number's email
column should show as an result.
Now here's what I have tried :
SELECT C.email FROM customer_comment C INNER JOIN OELINCMT_SQL L ON LTRIM(RTRIM(C.order_no)) = LTRIM(RTRIM(L.ord_no))
WHERE NOT EXISTS (SELECT cmt_sql_no from OELINCMT_SQL where cmt_sql_no = 3)
Basically I joined both tables on order_no = ord_no
and then tried to connect a NOT EXIST
there and added a sub query SELECT cmt_sql_no from OELINCMT_SQL where cmt_sql_no = 3
. If the query works I should see [email protected]
and [email protected]
as the results. But I do not see anything. Which part am I doing wrong? And to get the expected results what should I edit here?
Appreciate your help!
CodePudding user response:
You should filter the order number in the NOT EXISTS clause as well. Otherwise, if there is at least one row in the whole table with cmt_sql_no=3, the result will be nothing.
SELECT
C.email
FROM customer_comment C
INNER JOIN OELINCMT_SQL L ON
LTRIM(RTRIM(C.order_no)) = LTRIM(RTRIM(L.ord_no))
WHERE NOT EXISTS (SELECT 1 from OELINCMT_SQL x
where
x.cmt_sql_no = 3
and LTRIM(RTRIM(C.order_no)) = LTRIM(RTRIM(x.ord_no)))