我有2个表客户,类别
类别:
category_id category_name vendor_id
1 laptops 10
2 bikes 10
3 cars 10
客户:
user_name password assigned_categories vendor_id
nag 12345 1,2,3 10
当我使用user_name和密码登录时...我需要从类别中获取所有category_id,category_name。但是我只获得第一个类别的详细信息,如
category_id=1,category_name=laptops
答案 0 :(得分:0)
您的客户表格不遵守First Normal Form,因为您在assigned_categories
属性中存储了多个值。如果您要创建一个新表customer_assignments,可以使用基本的SQL
命令轻松完成。
以下是新表customer_assignments
的外观:
user_name(FK)
category_id(FK)
PRIMARY KEY(user_name,category_id)
Many-to-Many relationships应该像这样处理,而不是通过在一个属性中添加多个值。
然后,您可以使用以下查询提取所需信息:
SELECT category_id, category_name
FROM (category NATURAL JOIN customer_assignments) NATURAL JOIN customer
WHERE user_name = your_current_user_name
答案 1 :(得分:0)
如果您没有更改结构,那么以下查询将帮助您获得所需的结果
DECLARE @Test VARCHAR(MAX) = ''
SELECT SET @Test = assigned_categories FROM customer WHERE user_name = 'nag'
IF LEN(@Test) > 0
BEGIN
CREATE TABLE #Temp(category_id VARCHAR(MAX))
WHILE LEN(@Test) > 0
BEGIN
IF CHARINDEX(',',@Test) > 0
BEGIN
INSERT INTO #Temp VALUES(LEFT(@Test,CHARINDEX(',',@Test)-1))
SET @Test = SUBSTRING(@Test,CHARINDEX(',',@Test) + 1,LEN(@Test))
END
ELSE
BEGIN
INSERT INTO #Temp VALUES(@Test)
SET @Test = ''
END
END
SELECT * FROM category INNER JOIN #Temp ON category.category_id = #Temp.category_id
END
答案 2 :(得分:0)
使用SQL IN operator可能有所帮助,这允许您在WHERE子句中指定多个值。