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=で2つのテーブルに参加したいcategory.id

SQLで可能ですか?

4

5 に答える 5

2

列を分割することsubcategoryから始めます。company_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の2つの列があります。次に、選択は次のようになります。

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を実行できるようになります

 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 に答える