mysql从连接查询中获取多个结果

时间:2012-12-19 20:53:23

标签: mysql

当我执行特定标记的搜索查询时,我无法从'catalog_tag'表中返回多个'标记'。如果我在'catalog.catalog_id'上搜索,我会通过内连接获得所有相关标签。有没有办法在搜索特定标签时抓取标签?

表:

catalog table has: catalog_id|name|post_date

catalog_tag_relationship has: catalog_id|tag_id

catalog_tag has: tag_id|tag_name

SQL:

SELECT catalog_id, name, tag.tag_id, tag.tag_name 
FROM catalog   
INNER JOIN catalog_tag_relationship tagRel ON (tagRel.catalog_id=catalog.catalog_id)  
INNER JOIN catalog_tag tag ON (tagRel.catalog_tag_id=tag.tag_id)  
WHERE (tag.tag_name='dinosaurs') 

1 个答案:

答案 0 :(得分:1)

修订:

SELECT
  catalog.catalog_id,
  catalog.name,
  tag.tag_id,
  tag.tag_name
FROM (
  SELECT
    catalog.catalog_id as search_id
  FROM catalog
  INNER JOIN catalog_tag_relationship tagRel
          ON tagRel.catalog_id=catalog.catalog_id
  INNER JOIN catalog_tag tag ON tagRel.catalog_tag_id=tag.tag_id
  WHERE tag_name='dinosaurs'
  GROUP BY catalog.catalog_id
) AS searchList
INNER JOIN catalog ON catalog.catalog_id = search_id
INNER JOIN catalog_tag_relationship tagRel
        ON tagRel.catalog_id=catalog.catalog_id
INNER JOIN catalog_tag tag ON tagRel.catalog_tag_id=tag.tag_id

编辑:这应该返回与从catalog表中选择单个列表相同的结果。

步骤1:查找目录ID的匹配搜索条件列表。

步骤2:填写步骤1中找到的目录ID的所有目录信息。

这将为每个商品返回多行,但每个唯一目录只返回1行< - >标签映射。如果您希望每个目录有一行,则需要GROUP_CONCAT()才能查看该目录的所有不同标记。