在一个表中,我有一列的数据类似“ Test1”,“ Test2”。为什么我不能在具有IN条件的另一个选择查询中使用此列数据。
Example:
Table TESTING2:
AREA_NAME
-------------------------------
'Tilaknagar','Kadubeesinahalli'
Table TESTING1:
NAME AREA
---- ----------------
Ravi Tilaknagar
Ram Kadubeesinahalli
如果我写查询
SELECT *
FROM TESTING1
WHERE AREA IN (SELECT AREA_NAME FROM TESTING2);
不起作用。如何使它正常工作。
答案 0 :(得分:1)
您可以尝试使用curl
函数来替换replace
逗号,然后使用'
来分隔逗号。
regexp_substr
查询1 :
CREATE TABLE TESTING2(
AREA_NAME VARCHAR(500)
);
INSERT INTO TESTING2 VALUES ('''Tilaknagar'',''Kadubeesinahalli''');
CREATE TABLE TESTING1(
NAME VARCHAR(50),
AREA VARCHAR(500)
);
INSERT INTO TESTING1 VALUES ('Ravi','Tilaknagar');
INSERT INTO TESTING1 VALUES ('Ram','Kadubeesinahalli');
Results :
SELECT *
FROM TESTING1
WHERE AREA IN (
SELECT regexp_substr(replace(AREA_NAME,'''','') , '[^,]+', 1, x.n)
FROM TESTING2
cross join (SELECT ROWNUM n FROM dual CONNECT BY ROWNUM <= 5) x
)
注意
| NAME | AREA |
|------|------------------|
| Ravi | Tilaknagar |
| Ram | Kadubeesinahalli |
的数字需要设置为大于CONNECT BY ROWNUM <= 5
列的逗号数量。
答案 1 :(得分:1)
这是一个非常糟糕的表设计。您应该考虑更改它并标准化表格。存储逗号分隔的值势必会引起问题。
您可以执行以下操作。这可能比Regexp解决方案稍微有效。
SELECT *
FROM testing1 t1
WHERE EXISTS (
SELECT 1
FROM testing2 t2
WHERE ',' || t2.area_name || ',' LIKE '%,''' || t1.area || ''',%'
);
答案 2 :(得分:0)
“ IN”子句可用于从一个表中提取数据,并使用它过滤驱动表。两个表上使用的列上的值必须完全匹配(大小写,顺序等)。如果它们不匹配,则不会返回任何行。
答案 3 :(得分:0)
正如已经指出的那样,这是一个非常糟糕的设计。但是更简单的查询也可以解决该请求。希望你的桌子不大。
select distinct t1.*
from testing1 t1
, testing2 t2
where instr(t2.area_name,t1.area) > 0;