mysql选择数据

时间:2010-07-17 11:36:27

标签: sql mysql

我有两个表,productsproduct_tags

产品表;

product_id int
name varchar
description text
price decimal(12,2)
status enum
sale int
hit int
date_add datatime
date_update datetime

product_tags表;

tag_id int
product_id int
tag varchar

其中product_tags表与products具有一对多的关系,例如:

tag_id | product_id | tag
1       1             tag1
2       1             tag2
3       1             tag3

我想从单个查询中提取数据。 (产品和产品标签)。

1 个答案:

答案 0 :(得分:2)

使用类似的东西:

SELECT *
  FROM products p
 INNER JOIN product_tags pt
    ON (p.product_id = pt.product_id)

如果您想要获取所有产品而不管它们是否有标签,请使用OUTER JOIN。

SELECT *
  FROM products p
  LEFT OUTER JOIN product_tags pt
    ON (p.product_id = pt.product_id)

如果您尝试将每个产品的所有标记组合成一个以逗号分隔的列表,那么像这样的东西可能在mysql中起作用:

SELECT p.product_id, GROUP_CONCAT(pt.tag SEPARATOR ',')
  FROM products p
  LEFT OUTER JOIN product_tags pt
    ON (p.product_id = pt.product_id)
 GROUP BY p.product_id;

有关GROUP_CONCAT的进一步文档,请参阅MySQL Reference Manual