我在为这种情况创建适当的sql查询时遇到了麻烦。我有1个表存储CATEGORY_ID的表。加入表的问题sql
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"
谢谢!
也许需要未使用条款 – Tony
你有没有考虑过使用UNION ALL? –
也许我误解了,但是如果您将WHERE更改为指向cp.parent_cat_id =“randomID”(查询父母的猫而不是猫),那么您的第一个查询不会工作吗?此外,如果没有该猫的子记录(每个最终连接),则会忽略父猫记录。只是一些想法 - 也许我误解了这个问题... –