2017-06-25 4 views
0

私は2つのデータベースを持っています。 1つのデータベースはMysqlにあり、もう1つはSQL Serverにあります。(MYSQLとSQL Server)複数の列を1つの値で繰り返し検索/ループ/カーソルなしで検索する方法はありますか?

両方のデータベースの構造は同じです。

今、問題は、テーブルの複数の列から1つの値を検索することです。

何が最善のアプローチで、私はwhere句でサブクエリを使いたくありません。 すべての列から検索したいが条件を満たすものはどれか。

私はこの(MySQL)クエリで試しています。現在、私はストアドプロシージャを使用するよりもハードコードされた値を配置しています。

修正してください。ありがとうございます

SELECT ID, 
    NAME, 
    IFNULL(ADDRESS1, '') ADDRESS1, 
    IFNULL(PHONE_NO, '') PHONE_NO, 
    IFNULL(Speciality, '') Speciality 
FROM company 
WHERE 
    countryId = 158 AND 
    ('Makeup'='' OR NAME LIKE CONCAT('%','Makeup','%')) AND 
    ('Makeup'='' OR ADDRESS1 LIKE CONCAT('%','Makeup','%')) AND 
    ('Makeup'='' OR PHONE_NO LIKE CONCAT('%','Makeup','%')) AND 
    CASE 
     WHEN ''='' THEN 1=1 
     ELSE (Speciality LIKE CONCAT('%','','%')) 
    END 
ORDER BY NAME ASC; 
+0

ゴードン・リノフ。ありがとう、私の問題はこれではありませんでした。私のクエリは正しく動作していませんでした。私はそれに問題があるかどうか尋ねたがっていますか? – user6306245

+0

ありがとう、私は問題を発見した。実際にはデータが失われていたり間違っていました私の尋ねられた質問は答えられましたが、あなたが人々に私が最もよく質問をするのを助けたら、それはパフォーマンスごとに評価されるでしょう。ありがとうございます - – user6306245

答えて

1

複数のデータベースで動作するコードを記述する必要がある場合は、アプリケーション層でさらに作業することをおすすめします。単純に:

SELECT ID, NAME, COALESCE(ADDRESS1, '') as ADDRESS1, 
     COALESCE(PHONE_NO, '') as PHONE_NO, 
     COALESCE(Speciality, '') as Speciality 
FROM company 
WHERE countryId = 158 AND 
     NAME like '%Makeup%' AND 
     ADDRESS1 like '%Makeup%' AND 
     PHONE_NO like '%Makeup%' AND 
     Specialty LIKE '%%' 
ORDER BY NAME Asc; 

次に、ワイルドカードをアプリケーションの "Makeup"文字列に入れます。 2つのワイルドカード%%は、%と同じです。これは、あなたのロジックを正確に行います。 。 。さまざまな列がNULLではないと仮定します。

また、可能であればANSI標準機能を使用してください。 COALESCE()はANSI標準です。上記のコードは両方のデータベースで動作するはずです。

+0

「LIKE」の最初と最後の両方でワイルドカードを使用すると、パフォーマンスが大幅に低下することになります。この場合はうまくいくが、一般的にはベストプラクティスではない。 –

+0

@EvaldasBuinauskas。 。 。あなたは*答え*ではなく*質問*にコメントを書くべきです。これはOPが問題にしていることです。 –

+0

@ user6306245 。 。新しい質問(パフォーマンスについて)はコメントではなく新しい*質問としてお願いします。 –

関連する問題