+----+-----------+-----------+-------------+----------+
| 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 |
+----+-----------+-----------+-------------+----------+
Run Code Online (Sandbox Code Playgroud)
我有上面的数据表。我使用下面的查询从表中获取数据。
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)
Run Code Online (Sandbox Code Playgroud)
在这里,我使用内部连接value_id从它的parent_id.
基本上,它会检查当前记录是否有可用的父项,如果有的话,将获取其数据。如果我有与记录的父母数量一样多的父母,我可以获得正确的数据INNER JOIN
就像上面的查询一样,我得到了像
+-------+-------+-------+-----------+
| name0 | name1 | name2 | name3 |
+-------+-------+-------+-----------+
| ttt | 4000 | 2 | comprable |
| rrr | 5000 | 3 | comprable |
+-------+-------+-------+-----------+
Run Code Online (Sandbox Code Playgroud)
在这里我想得到下表
+-------+-------+-------+-----------+
| name0 | name1 | name2 | name3 |
+-------+-------+-------+-----------+
| ttt | 4000 | 2 | comprable |
| rrr | 5000 | 3 | comprable |
| bbb | 4000 | NULL | NULL |
+-------+-------+-------+-----------+
Run Code Online (Sandbox Code Playgroud)
这里最后一排,我没有d2和d3表可用。我也想包含这些数据的NULL价值。
任何帮助表示赞赏。
Joe*_*e W 14
如果您用左连接替换内连接,您将获得所需的数据。即使在另一侧没有匹配项,左连接也会显示结果,并且在这些情况下显示空值。
SELECT `d0`.`name` AS `name0`, `d1`.`name` AS `name1`, `d2`.`name` AS
`name2`, `d3`.`name` AS `name3` FROM `my_table_1` AS `d0`
LEFT JOIN `my_table_1` AS `d1` ON d1.parent_id = d0.value_id
LEFT JOIN `my_table_1` AS `d2` ON d2.parent_id = d1.value_id
LEFT JOIN `my_table_1` AS `d3` ON d3.parent_id = d2.value_id
WHERE (d0.dropdown_id=56)
Run Code Online (Sandbox Code Playgroud)
小智 7
使用左连接,原因如下:
联接的基础知识
一个内部加入只会给你行,从左边和右边的表都匹配。
一个左联接将返回左表和匹配的记录中的所有记录右表。这意味着如果右表中没有匹配项,NULL 将出现在右表列的位置。
一个右连接作用的左和右表相同,但相反的行为。
然后有完整的外部联接和交叉联接,但您可以查找它,因为它们不适用于您的问题!