4

は、サードパーティのフィードからの数千の会社名を含む自動化されたプロセスによって作成されたテーブルを持っています。ほとんどの会社名は単なる名前ですが、会社名の後にハイフンが付いているものもあります。会社名のみを返す選択をしようとしています。現在、2つのクエリがあります。

SELECT DISTINCT vendor FROM feed_data;
SELECT DISTINCT SUBSTRING(vendor, 1, LOCATE(' - ', vendor)) FROM feed_data;

最初のクエリではすべてが表示され、2番目のクエリではハイフンがある会社名のみが表示されます。私は両方を取得する方法を探しています。

サンプルデータ:

vendor:
American Widgets
Bravo Widgets - The best widgets money can buy

また、このクエリは実際にはメニューに入力されているより大きなクエリのサブクエリ部分であるため、考えられる解決策が制限される可能性があります。

4

3 に答える 3

5

このクエリを使用します:

select distinct 
     if(LOCATE(' - ', vendor)>0, SUBSTRING(vendor, 1, LOCATE(' - ', vendor)), vendor)
from feed_data;
于 2012-06-01T14:19:45.360 に答える
1

ユニオンを使用します-半分ごとに1つのクエリ:

SELECT DISTINCT 
    SUBSTRING(vendor, 1, LOCATE(' - ', vendor))
FROM feed_data
where vendor like '%-%'
union
SELECT DISTINCT
    vendor
FROM feed_data
where vendor not like '%-%';

または、使用if()

SELECT DISTINCT
    if (vendor like '%-%', SUBSTRING(vendor, 1, LOCATE(' - ', vendor)), vendor)
FROM feed_data;

または、使用case

SELECT DISTINCT
    case
        when vendor like '%-%' then SUBSTRING(vendor, 1, LOCATE(' - ', vendor))
        else vendor
    end
FROM feed_data;
于 2012-06-01T14:16:35.747 に答える
0

このようなものがあります(ハイフンが付いているかどうかを示すフィールドが追加されたすべてのベンダーが表示されます)

SELECT distinct vendor,
(case when LOCATE('-', vendor) >= 0 
then 'True'
else 'False' end) as IsVendorWithHiphen
FROM feed_data;

-これは、どこでも置き換えられたすべてのベンダーの結果を提供します

select distinct 
(case when LOCATE('-', vendor) >= 0 then SUBSTRING(vendor, 1, LOCATE(' - ', vendor))
 else vendor) as myvendor from feed_data;
于 2012-06-01T14:24:08.403 に答える