我有两个表通过第三个表关联。第三个表具有前两个表的ID和关联值。 结构和小提琴可以在这里找到。
我想要做的是获取包含所有会话和属性的行。 所以期望的结果是
+-------+-----------+-------+
| name | attr_name | value |
+-------+-----------+-------+
| sessA | attrA | 9 |
| sessA | attrB | 5 |
| sessA | attrC | null |
| sessB | attrA | null |
| sessB | attrB | 1 |
| sessB | attrC | 1 |
| sessC | attrA | 1 |
| sessC | attrB | null |
| sessC | attrC | null |
+-------+-----------+-------+
但我只得到匹配的行。我错过了什么?
答案 0 :(得分:2)
听起来您想要在属性表和会话表之间使用cartesian product
。为此,您可以使用CROSS JOIN
。然后,您需要将联接中的attr_id字段包含在最终表中以获取NULL
值:
SELECT a.name, b.attr_name , c.value
FROM tbla a CROSS JOIN tblB b
LEFT JOIN tblc c ON a.sess_id = c.sess_id
AND b.attr_id = c.attr_id
ORDER BY a.name, b.attr_name