我正在尝试创建一个表,其中第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)”,但也无法使用。
答案 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;