sql newbie试图在两个表中交叉引用数据

时间:2013-02-22 20:57:49

标签: sql oracle cross-reference

我有两个表,DATA_TABLEERROR_TABLEDATA_TABLE有一个ID列,其中包含8位数字。 ERROR_TABLE有一列KEY,其中idkey=后跟八位数字。

我不能使用相交,因为元组不同,我不知道如何解决它。

我需要找到DATA_TABLEID列中的值与ERROR_TABLEKEY中的值对应的行。

这是一个视觉。我需要查看其中哪些匹配并显示DATA_TABLE

中的行
DATA_TABLE
  ID
  24294857
  19573859
  49205983

ERROR_TABLE
  KEY
  idkey=24294857
  idkey=66849896
  idkey=94697356

6 个答案:

答案 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;

请参阅:http://sqlfiddle.com/#!4/dbe73/3

答案 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));