Mysql连接通过第三个表关联的两个表

时间:2014-05-29 04:28:17

标签: php mysql

我有两个表通过第三个表关联。第三个表具有前两个表的ID和关联值。 结构和小提琴可以在这里找到。

sqlFiddle

我想要做的是获取包含所有会话和属性的行。 所以期望的结果是

+-------+-----------+-------+
| 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  |  
+-------+-----------+-------+

但我只得到匹配的行。我错过了什么?

1 个答案:

答案 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
相关问题