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

标签 php mysql

我有两个表,它们通过第三个表关联。第三个表具有前两个表的 ID 和关联值。 结构和 fiddle 可以在这里找到。

sqlFiddle

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

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

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

最佳答案

听起来您希望属性表和 session 表之间有一个笛卡尔积。为此,您可以使用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

关于php - Mysql 连接通过第三个表关联的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23925696/

相关文章:

php - SQL 选择日期在今天之前的记录

php - 在 Doctrine 中过滤 @OneToMany

php - 最佳实践,使用 PHP 尽快导入数据源并下载每一行的图像

php - 检查唯一键并更新行或创建一个新的 WordPress

php - 使用 HTTP Session VS 序列化 JSON 数组来存储 SQL 结果

java - 我应该将数据库的凭据保存在哪里?

javascript - 复制相同的数据请求查询,但使用 JavaScript Ajax post

php - MYSQL 返回总结果

mysql - 将部署在 Glassfish 上的 JSF Web 应用程序连接到本地 MySQL 数据库

php - 没有 SQLite 扩展的 PHP 中的 SQLite