mysql - 连接表sql的问题

标签 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"

谢谢!

最佳答案

改变这个:

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

关于mysql - 连接表sql的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19276549/

相关文章:

mysql - 从 SQL 结果中删除重复项并显示其他列

mysql获取表中某个范围内的值

mysql - cakephp3 查找具有选定列的数据

sql - MySQL/SQL 的简写 "Using"可以不说 "Inner Join"就用吗?

MySQL 无法添加外键约束

MySQL 触发器 STR_TO_DATE(NEW.invoice_date, '%d/%m/%Y')

mysql - SQL INNER JOIN ON LIKE

mysql - 如何在 Mysql Workbench GUI 中查看表格内容?

sql - 如何使 LAG() 忽略 SQL Server 中的 NULLS?

java - 如果ID是IDENTITY COLUMN,如何删除或更改ID?