2013-02-22 34 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));