4

A 有一个由自动过程填充的表,其中包含来自第三方提要的数千个公司名称。大多数公司名称只是名称,但有些公司名称后有连字符。我正在尝试进行仅返回公司名称的选择。现在我有两个疑问:

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

第一个查询给了我一切,第二个查询只给了我有连字符的公司名称。我正在寻找一种同时获得两者的方法。

样本数据:

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

使用联合 - 每半个查询:

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 回答