2017-07-20 6 views
-2

未知のTABLE_NAMEの名前(つまり、COLUMN_NAMEとCOLUMN_NAMEの値)をテストして、瞬時に知っている岩の中に詰まっていると感じることができます。値をテストしてTABLE_NAMEを取得する

以下

が、私は、現時点で作成することができます悪いSQLクエリです:

SELECT TABLE_NAME 
FROM information_schema.tables 
WHERE TABLE_SCHEMA = "work" AND 
    (SELECT COLUMN_NAME 
    FROM information_schema.columns 
    WHERE COLUMN_NAME.email = "[email protected]") = true; 

すべてのヘルプは途方もいただければ幸いです...事前

+2

のような値をテストすることができ、 "SAM" これが結果を返す言うことができますしたいと思います列には通常、電子メールアドレス – Hogan

+0

がありません。 emailという名前の列に特定の値が存在するかどうかを確認します。 – Hogan

+0

私は私のクライアントの電子メールアドレスを格納するために使用するemailという列を作成しましたが、それは私の間違っていますか?@Hogan – keldimkpa

答えて

1

で感謝だから、私の提案を求めたとここにあります....

SQLを使って作業するときは、動的SQLを絶対に避けるべきです。悪い考えです。この場合、5つの表に1つの列があり、簡単にすべてを検索して名前を見つける必要があります。この要件がある場合は、次のようにします。データモデルの詳細に応じて正規化する(または標準化を解除する)ビューを作成し、そこから選択します。

それは次のようになります。今、あなたはちょうどこの行うことができます。このビューがあること

CREATE OR REPLACE VIEW ALL_EMAIL (
    TABLENAME VARCHAR(100), 
    EMAIL  VARCHAR(100) 
) 
AS 

    SELECT 'Table1', Email 
    FROM Table1 
    UNION ALL 

    SELECT 'Table2', Email 
    FROM Table2 
    UNION ALL 

    SELECT 'Table3', Email 
    FROM Table3 
    UNION ALL 

    SELECT 'Table4', Email 
    FROM Table4 
    UNION ALL 

    SELECT 'Table5', Email 
    FROM Table5 

SELECT TABLENAME 
    FROM ALL_EMAIL 
    WHERE EMAIL = '[email protected]' 

これは、はるかにこの問題を解決するための「ベストプラクティス」の方法ですが。


前に答え

私はあなたがこの

SELECT TABLE_NAME 
FROM information_schema.column 
WHERE ucase(COLUMN_NAME) = 'EMAIL' 
    AND TABLE_SCHEMA = 'work' 

は、あなたがこの

SELECT * 
FROM sam 
WHERE email = '[email protected]' 
+0

ありがとう...しかし、ucaseは何ですか? – keldimkpa

+0

使用しているSQLプラットフォームによってUPPERになる可能性があります。文字列を大文字にします。 – Hogan

+0

それで、私はその悪いクエリを断片に分解しなければなりません...もう一度ありがとうございます。 – keldimkpa

関連する問題