2013-02-22 113 views
1

我有两个表,DATA_TABLEERROR_TABLEDATA_TABLE有一个8位数字的列IDERROR_TABLE有一列KEYidkey=后跟八位数字。sql新手试图交叉引用两个表中的数据

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

我需要的是找到DATA_TABLE具有在对应于ERROR_TABLEKEY列的值ID列中的值的行。

这是一个视觉效果。我需要看这些比赛,并从DATA_TABLE

DATA_TABLE 
    ID 
    24294857 
    19573859 
    49205983 

ERROR_TABLE 
    KEY 
    idkey=24294857 
    idkey=66849896 
    idkey=94697356 
+0

您使用的是哪种数据库平台? SQL Server,Oracle,MySQL,Postgres ...? – Matt 2013-02-22 20:59:03

+0

我正在使用oracle – 2013-02-22 21:01:16

+1

[你有什么尝试?](http://whathaveyoutried.com) – 2013-02-22 21:03:03

回答

3

显示这些行我会用一个简单的内连接

select * 
from DATA_TABLE 
inner join ERROR_COLUMN 
    on DATA_TABLE.ID = ERROR_TABLE.KEY 
0
select dt.* 
from data_table dt 
join error_table et 
    on et.idkey = dt.id 
0

你的意思是这样?

SELECT * FROM DATA_TABLE d, ERROR_TABLE e 
WHERE ('idkey='||d.id = e.key) 
ORDER BY DATA_TABLE.id 
+0

@a_horse_with_no_name - 谢谢。固定。 – 2013-02-22 21:28:30

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 
/

该查询后会比较为number的加盟,这是唯一可以做的正确的事情。

0

感谢您的帮助。我尝试了这个建议,但无法让他们工作。即时通讯真的与绿色与SQL,只懂一些命令。 :/ 我从一个同事那里得到了这个,它完成了我所需要的。现在我只需要了解它。

SELECT * FROM DATA_TABLE WHERE EXISTS (SELECT NULL FROM ERROR_TABLE WHERE ID = SUBSTR(ERROR_TABLE.KEY,7));