我有两个表,DATA_TABLE
和ERROR_TABLE
。 DATA_TABLE
有一个ID
列,其中包含8位数字。 ERROR_TABLE
有一列KEY
,其中idkey=
后跟八位数字。
我不能使用相交,因为元组不同,我不知道如何解决它。
我需要找到DATA_TABLE
中ID
列中的值与ERROR_TABLE
列KEY
中的值对应的行。
这是一个视觉。我需要查看其中哪些匹配并显示DATA_TABLE
DATA_TABLE
ID
24294857
19573859
49205983
ERROR_TABLE
KEY
idkey=24294857
idkey=66849896
idkey=94697356
答案 0 :(得分:3)
我会使用简单的内连接
select *
from DATA_TABLE
inner join ERROR_COLUMN
on DATA_TABLE.ID = ERROR_TABLE.KEY
答案 1 :(得分:0)
select dt.*
from data_table dt
join error_table et
on et.idkey = dt.id
答案 2 :(得分:0)
你的意思是这样吗?
SELECT * FROM DATA_TABLE d, ERROR_TABLE e
WHERE ('idkey='||d.id = e.key)
ORDER BY DATA_TABLE.id
答案 3 :(得分:0)
与PM 77-1类似,但使用显式连接:
SELECT *
FROM DATA_TABLE
JOIN ERROR_TABLE
ON 'idkey=' || ID = KEY;
答案 4 :(得分:0)
最好的办法是更正错误表中的数据。这些示例将仅删除留下数字的文本。您可以使用TO_NUMBER()函数将它们显式转换为数字以进行连接和比较。您已经有很多加入示例。但在加入之前,你需要将双方转换成数字,以切断数字前面的字符:
-- This example assumes you will always have '=' in your string --
SELECT SUBSTR('idkey=24294857', INSTR('idkey=24294857', '=')+1) digits_only
FROM dual
/
SELECT regexp_replace('idkey=24294857','[^0-9]') digits_only
FROM dual;
/
SELECT REGEXP_SUBSTR('idkey=24294857','[[:digit:]]+') AS digits_only FROM dual
/
在此之后,您的查询将比较连接中的数字与数字,这是唯一正确的事情。
答案 5 :(得分:0)
感谢您的帮助。我尝试了这个建议,但无法让他们工作。我真的很绿色与SQL,只能理解一些命令。 :/ 我是从同事那里得到的,它完成了我所需要的。现在我只需要理解它。
SELECT * 来自DATA_TABLE 在哪里存在 (SELECT NULL 来自ERROR_TABLE WHERE ID = SUBSTR(ERROR_TABLE.KEY,7));