DB 테이블명 컬럼명을 모를때 값 조회 방법 문의

익명 사용자의 이미지

안녕하세요
sql 쿼리문 질문 좀 드리겠습니다

현재 분석중인 sqlite 파일에 테이블이 30개 정도 있고
테이블마다 row 개수는 수천개에서 500만개까지 다양합니다

여기서 문의 드립니다

예를들어
"ABC" 라는 값이 디비 어딘가에 저장이 되어있는건 확실한데
어느 테이블의 어느 컬럼에 있는 값인지 모르는 상황입니다
이것을 c++ 같은 프로그래밍 언어로 찾기보다는 sql 쿼리문으로 찾고 싶습니다

30개의 테이블을 하나의 테이블로 join하여
다양한 타입의 컬럼을 문자열 형태로 비교하면서 찾아야할까요?
어떤 방법을 사용하면 좋은지 궁금합니다

crimsoncream의 이미지

저라면
테이블 별로 key로 소팅하고 모든 필드를 concatenate 해서
테이블명, row number, concat된 스트링으로 결과를 정형화 한 후 union하고 그 결과에 대해
regex 사용해서 concat된 string에 조건을 걸어 보겠습니다.

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

pasart6의 이미지

-- postgresql 모든 테이블에서 값을 찾기

DO $$
DECLARE
r RECORD;
query TEXT;
value_to_search VARCHAR := 'g45'; -- 여기가 값
result RECORD;
BEGIN
FOR r IN SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'public' -- Replace with your schema
LOOP
IF r.data_type IN ('character varying', 'varchar', 'text') THEN
query := 'SELECT ' || quote_ident(r.column_name) || ' FROM ' || quote_ident(r.table_name) ||
' WHERE ' || quote_ident(r.column_name) || ' = ' || quote_literal(value_to_search);

FOR result IN EXECUTE query
LOOP
RAISE NOTICE 'Value found in table %, column %', r.table_name, r.column_name;
EXIT; -- Exit the inner loop after finding the value
END LOOP;
END IF;
END LOOP;
END $$;

--컬럼이름 찾기

DO $$
DECLARE
r RECORD;
column_to_search VARCHAR := '찾고자 하는 컬럼명'; -- Replace with the column name you are searching for
BEGIN
FOR r IN SELECT table_schema, table_name
FROM information_schema.columns
WHERE column_name = column_to_search
LOOP
RAISE NOTICE 'Column found in schema %, table %', r.table_schema, r.table_name;
END LOOP;
END $$;

#도움이 될지는 모르겠지만 그냥 던져보고 갑니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.