我有一个表,其中包含有关经销商和唯一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"
数据类型实现我想要的?
答案 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.