+----+-----------+-----------+-------------+----------+
| id | value_id | parent_id | dropdown_id | name |
+----+-----------+-----------+-------------+----------+
| 7 | 14945 | 14944 | 57 |4000 |
| 8 | 14944 | 0 | 56 |bbb |
| 9 | 14943 | 14940 | 59 |comprable |
| 10 | 14942 | 14939 | 59 |comprable |
| 11 | 14940 | 14931 | 58 |3 |
| 12 | 14939 | 14930 | 58 |2 |
| 13 | 14931 | 14929 | 57 |5000 |
| 14 | 14930 | 14928 | 57 |4000 |
| 15 | 14929 | 0 | 56 |rrr |
| 16 | 14928 | 0 | 56 |ttt |
+----+-----------+-----------+-------------+----------+
我有上面的数据表。我使用下面的查询从表中获取数据。
SELECT `d0`.`name` AS `name0`,
`d1`.`name` AS `name1`,
`d2`.`name` AS `name2`,
`d3`.`name` AS `name3`
FROM `my_table_1` AS `d0`
INNER JOIN `my_table_1` AS `d1`
ON d1.parent_id = d0.value_id
INNER JOIN `my_table_1` AS `d2`
ON d2.parent_id = d1.value_id
INNER JOIN `my_table_1` AS `d3`
ON d3.parent_id = d2.value_id
WHERE ( d0.dropdown_id = 56 )
在这里,我使用内部连接value_id
从它的parent_id
.
基本上,它将检查当前记录是否有可用的父级,如果有的话,将获取其数据。如果我的父母数量与记录的数量一样多,我可以获得正确的数据INNER JOIN
就像上面的查询一样,我得到了像
+-------+-------+-------+-----------+
| name0 | name1 | name2 | name3 |
+-------+-------+-------+-----------+
| ttt | 4000 | 2 | comprable |
| rrr | 5000 | 3 | comprable |
+-------+-------+-------+-----------+
在这里我想得到下表
+-------+-------+-------+-----------+
| name0 | name1 | name2 | name3 |
+-------+-------+-------+-----------+
| ttt | 4000 | 2 | comprable |
| rrr | 5000 | 3 | comprable |
| bbb | 4000 | NULL | NULL |
+-------+-------+-------+-----------+
在最后一行,我没有可用d2
的d3
表格。我也想包含这些数据的NULL
价值。
任何帮助表示赞赏。
如果您用左连接替换内部连接,您将获得所需的数据。即使另一边没有匹配项,左连接也会显示结果,并且在这些情况下显示空值。
使用Left Join而不是Inner Join。
内连接只会给你从左表和右表匹配的行。
Left Join将返回左表中的所有记录和右表中的匹配记录。如果右表中没有匹配项,则 NULL 将代替右表列出现。