SQlite多个ID链接到另一个表

时间:2018-08-03 08:35:06

标签: sqlite

我有一个表,其中包含有关经销商和唯一ID的行。

['Lorem ipsum', 'ipsum dolor', 'dolor sit', 'sit amet,', 'amet, consectetur', 'consectetur adipiscing', 'adipiscing elit,', 'elit, sed', 'sed do', 'do eiusmod', 'eiusmod tempor', 'tempor incididunt', 'incididunt ut', 'ut labore', 'labore et', 'et dolore', 'dolore magna', 'magna aliqua.']

另一张表中包含有时可以在多个经销商处购买的产品。

id    name
1     dealer1
2     dealer2

现在,我想查询所有经销商可用的产品,但我不知道如何。我尝试过类似的事情:

name     dealerids
product1 1, 2
product2 2

这不起作用。我在C#中,SELECT * FROM dealers WHERE id IN (SELECT dealerids FROM products WHERE name = "product1") 基于字符串,并作为dealerids存储在数据库中。我尝试过TEXT"'1', '2'",但都对我不起作用。

我对SQL不熟悉,所以有没有办法使用"1, 2"数据类型实现我想要的?

2 个答案:

答案 0 :(得分:0)

好吧,这是将值存储在数据库中的一种奇怪方法-以逗号分隔的字符串。但是,如果确实如此,则不能将其更改为多行,每条记录都对应一个经销商ID,则可以尝试以下操作:

select * from dealers where exists (select 1 from products where  name = "product1" and dealerids like 
dealers.id || ',' || '%') or exists
(select 1 from products where name = "product1" and dealerids like '%' || ', ' || dealers.id || ',%')
or exists 
(select 1 from products where name = "product1" and dealerids like '%, ' || dealeris.id)

第一个子句用于处理所需的delearid是字符串中的第一个子句的情况,第二个子句用于在中间的情况,而第三个子句用于结尾的id。

答案 1 :(得分:0)

在您的方案中,规范化数据库看起来像这样。

// table_dealer
   id  name
   1   dealer1
   2   dealer2

// table_product
   id   title
   1    product1
   2    product2


//table_associate
   id     product_id    dealer_id
    1       1              1
    1       2              1
  

现在,我想查询所有经销商可用的产品,但我不知道如何。我尝试过类似的

  //searching by product_id
  select  dealer_id from table_associate where product_id = X

  Use JOIN query to get data from these 3 tables.