加入表sql的问题

时间:2013-10-09 15:40:42

标签: mysql sql

我在为这种情况创建适当的SQL查询时遇到了问题。我有1个表,其中存储了CATEGORY_ID。

p_xref
+-------------+
| CATEGORY_ID |
+-------------+
|        5005 |
+-------------+

此CATEGORY_ID是父类别,它可能包含子类别ID。我在下一张表中检查了这一点。对于此表中的每个CATEGORY_ID,都有一个PARENT_CAT_ID。如果该类别没有父级,则将其设置为-1。我的查询当前在第一个表中查找PARENT_CAT_ID和CATEGORY_ID之间的匹配。

category_profile
+-------------+---------------+
| CATEGORY_ID | PARENT_CAT_ID |
+-------------+---------------+
|        5028 |          5005 |
|        5005 |            -1 |
+-------------+---------------+

然后我将此类别ID与最终表格匹配,以便获取ITEM_ID。

item_xref
+-------------+---------+
| CATEGORY_ID | ITEM_ID |
+-------------+---------+
|        5028 |    6767 |
+-------------+---------+

我当前查询的问题是它只抓取子类别,而不适用于父类别。我可以做相反的事情,匹配所有父类别,没有子类别。无论如何要结合这两个查询吗?

查询1:仅抓取子类别匹配

SELECT DISTINCT DATE FROM promotion p 
                LEFT JOIN p_xref pcx ON p.P_ID = pcx.P_ID
                LEFT JOIN category_profile cp ON pcx.CATEGORY_ID = cp.PARENT_CAT_ID   
                LEFT JOIN item_xref icx ON cp.CATEGORY_ID = icx.CATEGORY_ID
                WHERE icx.ITEM_ID = "randomID"

查询2:仅抓取父类别匹配

                SELECT DISTINCT DATE FROM promotion p 
                LEFT JOIN p_xref pcx ON p.P_ID = pcx.P_ID 
                LEFT JOIN item_xref icx ON pcx.CATEGORY_ID = icx.CATEGORY_ID
                WHERE icx.ITEM_ID = "RandomID"

谢谢!

2 个答案:

答案 0 :(得分:0)

改变这个:

LEFT JOIN category_profile cp ON pcx.CATEGORY_ID = cp.PARENT_CAT_ID   

到这个

JOIN category_profile cp ON pcx.CATEGORY_ID = cp.PARENT_CAT_ID   
or pcx.category_id = cp.category_id

答案 1 :(得分:0)

我会反向开始获取所查找的项目,然后以其他方式链接。通过使用WHERE子句,您可以强制进入INNER连接和LEFT连接。 (没有生产表列的列表,但假设日期来自该表)

select distinct 
      p.Date
   from
      item_xref ixc
         JOIN category_profile cp
            on icx.category_id = cp.category_id
            LEFT JOIN p_xref x1
               on cp.category_id = x1.category_id
               OR cp.parent_cat_id = x1.category_id
               left join promotion p
                  on x1.category_id = p.p_id
   where
      icx.item_id = "randomid"

确保一个 Item_id上的item_xref表的索引 category_id上的category_profile索引