2

私は2つのテーブルを持っていDATA_TABLEますERROR_TABLE. 8桁の数字DATA_TABLEの列があります。の列があり、その後に 8 桁の数字が続きます。IDERROR_TABLEKEYidkey=

タプルが異なり、回避方法がわからないため、交差を使用できません。

必要なのは、列の値に対応する列のDATA_TABLE値を持つ行を見つけることです。IDERROR_TABLEKEY

こちらがビジュアルです。これらのどれが一致するかを確認し、それらの行を表示する必要がありますDATA_TABLE

DATA_TABLE
  ID
  24294857
  19573859
  49205983

ERROR_TABLE
  KEY
  idkey=24294857
  idkey=66849896
  idkey=94697356
4

6 に答える 6

3

単純な内部結合を使用します

select * 
from DATA_TABLE 
inner join ERROR_COLUMN  
   on DATA_TABLE.ID = ERROR_TABLE.KEY
于 2013-02-22T21:06:18.567 に答える
1

PM 77-1 に似ていますが、明示的な結合を使用します。

SELECT *
  FROM DATA_TABLE
  JOIN ERROR_TABLE
    ON 'idkey=' || ID = KEY;

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

于 2013-02-22T21:20:50.587 に答える
1
select dt.* 
from data_table dt 
join error_table et 
   on et.idkey = dt.id
于 2013-02-22T21:06:27.040 に答える
0

このようなことを意味しますか?

SELECT * FROM DATA_TABLE d, ERROR_TABLE e
WHERE ('idkey='||d.id = e.key)
ORDER BY DATA_TABLE.id
于 2013-02-22T21:07:21.233 に答える
0

みんな助けてくれてありがとう!

私はすべての提案を試みましたが、どれもうまくいきませんでした。私は SQL に本当に慣れていて、いくつかのコマンドしか理解していません。

最後に、私は同僚からこれを入手し、必要なものを達成しました。今は理解するしかない…

SELECT *
FROM DATA_TABLE
WHERE EXISTS 
        (SELECT NULL
           FROM ERROR_TABLE
          WHERE ID = SUBSTR(ERROR_TABLE.KEY,7));
于 2013-02-25T14:53:22.030 に答える
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
/

この後、クエリは結合で数値と数値を比較します。これが唯一の正しいことです。

于 2013-02-22T21:25:51.643 に答える