2013-02-22 3 views
1

У меня есть две таблицы, DATA_TABLE и ERROR_TABLE. DATA_TABLE имеет номер ID с 8-значным номером. ERROR_TABLE имеет столбец KEY с idkey=, а затем восемь цифр.sql новичок пытается перекрещивать справочные данные в двух таблицах

Я не могу использовать пересечение, потому что кортежи разные, и я не знаю, как обойти его.

Что мне нужно, чтобы найти строки в DATA_TABLE, которые имеют значение в ID колонки, которая соответствует значению в ERROR_TABLE в KEY колонки.

Вот визуальный. Мне нужно, чтобы увидеть, какие из них спички и и отображать эти строки из DATA_TABLE

DATA_TABLE 
    ID 
    24294857 
    19573859 
    49205983 

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

Какую платформу базы данных вы используете? SQL Server, Oracle, MySQL, Postgres ...? – Matt

+0

Я использую oracle –

+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 - Спасибо. Исправлена. –

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 
/

После этого запроса будет сравнивать количество на номер в соединение, которое является единственно правильным, что нужно сделать.

0

благодарит за помощь. Я попробовал предложение, но не смог заставить их работать. im действительно зеленый с sql и только понимаю несколько команд. :/ Я получил это от коллеги, и он выполнил то, что мне нужно. теперь мне просто нужно это понять.

SELECT * ОТ DATA_TABLE , где существует (SELECT NULL ОТ ERROR_TABLE WHERE ID = SUBSTR (ERROR_TABLE.KEY, 7));

Смежные вопросы