如何在mysql中使用逗号运算符从另一个表中获取详细信息

时间:2014-02-17 08:34:31

标签: mysql

我有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

3 个答案:

答案 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子句中指定多个值。