0

我有一个company像这样的表格行:

id(int)  |name(string)  |maincategory(int)  |subcategory(string)    
1        |Google        |1                  |1,2,3
2        |yahoo         |4                  |4,1

和其他表category,如:

 id(int) |name(string)  
 1       |Search
 2       |Email
 3       |Image
 4       |Video

我想通过company.subcategory=加入拖车表category.id

可以在 sql 中使用吗?

4

5 回答 5

2

首先拆分您的subcategorycompany_category最后,您应该有一个以 company_id 和 category_id 作为列的附加表。

 company_id(int) |category_id(int)  
 1               |1
 1               |2
 1               |3
 2               |4
 2               |1
于 2012-05-19T08:04:00.700 回答
0

您的设计无效。你应该有另一个名为 companySubcategories 或类似的表。该表应该有两列 companyId 和 categoryId。然后您的选择将如下所示:

select <desired fields> from
company c
join companySubcategories cs on cs.companyId = cs.id
join category ct on ct.id = cs.categoryId
于 2012-05-19T08:04:27.993 回答
0

你可以像下面这样......

select * from 
company c, category cc
where c. subcategory like '%'||cc.id||'%';

它在 oracle 数据库中按预期工作..

于 2012-05-19T08:07:41.577 回答
0

您可以引入一个新表company_subcategory来跟踪子类别

  id (int) | subcategory(int)
    1      |    1
    1      |    2
    1      |    3
    2      |    1
    2      |    4

那么你就可以运行 select as

 select company.name AS company, category.name AS category 
   FROM company 
           JOIN company_subcategory 
                ON company.id = company_subcategory.company  
           JOIN category 
                ON company_subcategory.subcategory = category.id;

要得到

+---------+----------+
| company | category |
+---------+----------+
| google  | search   |
| google  | email    |
| google  | image    |
| yahoo   | search   |
| yahoo   | video    |
+---------+----------+
于 2012-05-19T08:08:13.387 回答
0


SELECT *
  FROM COMPANY CMP, CATEGORY CT
 WHERE (SELECT CASE
                 WHEN INSTR(CMP.SUB_CATEGORY, CT.ID) > 0 THEN
                  'TRUE'
                 ELSE
                  'FALSE'
               END
          FROM DUAL) = 'TRUE'

此查询使用 INSTR 函数在 SUB_CATEGORY 中查找 ID。如果它确实存在,则返回该行。

输出如下


ID  NAME   MAIN_CATEGORY  SUB_CATEGORY   ID    NAME
1   Google  1             1,2,3        1    Search
1   Google  1             1,2,3        2    Email
1   Google  1             1,2,3        3    Image
2   yahoo   2             4,1          1    Search
2   yahoo   2             4,1          4    Video

希望能帮助到你。

但是,我建议您避免使用这种类型的条目,因为 ID 应该有单独的条目而不是组合条目。这可能会在将来产生问题,因此最好现在避免。

于 2012-05-19T08:17:00.297 回答