简体   繁体   中英

Oracle SQL compare values from 2 tables and set yes/no

These are my example tables:

Table 1 table 2 column1 Table2 column2
CONCAT1 Concat2 Valid
A12 A11
A12 A12
B12
A12

i would like to add a Yes or No in the Valid column in table 2, if A11 and A12 from concat 2 table 2 cand be found in Concat1 table1.

It's probably simple, but i can't figure it out at all.

Expected:

Table 1 table 2 column1 Table2 column2
CONCAT1 Concat2 Valid
A12 A11 No
A12 A12 Yes
B12
A12

Thanks !!!

Use EXISTS and a correlated sub-query:

SELECT concat2,
       CASE
       WHEN EXISTS (SELECT 1 FROM table1 t1 WHERE t1.concat1 = t2.concat2)
       THEN 'Yes'
       ELSE 'No'
       END AS valid
FROM   table2 t2

Which, for the sample data:

CREATE TABLE Table1 (CONCAT1) AS
SELECT 'A12' FROM DUAL UNION ALL
SELECT 'A12' FROM DUAL UNION ALL
SELECT 'B12' FROM DUAL UNION ALL
SELECT 'A12' FROM DUAL;

CREATE TABLE table2 (concat2, valid) AS
SELECT 'A11', CAST(NULL AS VARCHAR2(3)) FROM DUAL UNION ALL
SELECT 'A12', NULL FROM DUAL

Outputs:

CONCAT2 VALID
A11 No
A12 Yes

Or, if you want to update the table then:

UPDATE table2 t2
SET valid = CASE
            WHEN EXISTS (SELECT 1 FROM table1 t1 WHERE t1.concat1 = t2.concat2)
            THEN 'Yes'
            ELSE 'No'
            END
WHERE valid IS NULL;

db<>fiddle 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