SQL-列值,取决于另一列值是否出现在第三列中

时间:2018-09-13 06:35:04

标签: sql

我正在尝试创建一个表,其中第3列的值将取决于第2列的任何行中是否存在第1列的值。

这就是我要创建的表的外观:

doc_name    doc_used    tool
---------------------------------
MEA123     MEA123       tool1      
MEA123     Null         tool1
MEA555     Null         Null
MEA554     Null         Null
MEA123     Null         tool1

但是我只能让它在第一行工作:

doc_name    doc_used    tool
---------------------------------
MEA123     MEA123       tool1      
MEA123     Null         Null
MEA555     Null         Null
MEA555     Null         Null
MEA123     Null         Null

这是我尝试的代码:

CREATE TABLE `/mydataset` AS (
SELECT 
doc_name,
doc_used,
(CASE 
   WHEN doc_name  in  (doc_used) then 'tool1'
END) as tool

FROM  `/test_dct_tool`)

可能的doc_used列表是未知的,因此我想检查doc_name列的值是否存在于col doc_used的整个值列表中。我曾尝试使用“ exists”和“ in(从中选择doc_used)”,但也无法使用。

2 个答案:

答案 0 :(得分:0)

以下查询将返回表的所有值,其中其他2列包含第1列的值

   select * from table1 where doc_name in (
    select doc_used as col from table1
     union
    select  tool from table1
    )

现在,您可以根据您的dbms进行表创建(使用另一个表创建表)了。

答案 1 :(得分:0)

您似乎想要:

SELECT doc_name, doc_used,
       (CASE WHEN doc_name IN (SELECT t2.doc_used FROM `/test_dct_tool`) 
             THEN 'tool1'
        END) as tool
FROM `/test_dct_tool` t;