mysql - 加入 NULL

标签 mysql

有很多关于联接和 null 的问题,但我找不到与此特定模式匹配的问题。我有 3 个非常简单的表。

+---------+
| service |
+---------+
| id      |
| name    |
+---------+

+-----------+
| propnames |
+-----------+
| id        |
| name      |
| sort      |
+-----------+

+----------+
| props    |
+----------+
| sid      |
| pid      |
| value    |
+----------+

我希望能够添加一个属性(到 propnames)并查询我的服务,加入我的属性(props)并知道哪些属性尚未设置。

如果这是服务

(id), (name)
1, "AAA"
2, "BBB"

这是propnames

(id), (name), (sort)
1, "property_a", 1
2, "property_b", 2
3, "property_c", 3

这是 Prop

(service.id), (propname.id), (value)
1, 1, "Service AAA has property_a value"
1, 2, "Service AAA has property_b value"
2, 1, "Service BBB has property_a value"

然后最终我的查询将产生这个:

(service.id), (service.name), (property.id), (property.name), (props.value)
1, "AAA", 1, "property_a", "Service AAA has property_a value"
1, "AAA", 2, "property_b", "Service AAA has property_b value"
1, "AAA", 3, "property_c", NULL
2, "BBB", 1, "property_a", "Service BBB has property_a value"
2, "BBB", 2, "property_b", NULL
2, "BBB", 3, "property_c", NULL

理想情况下,它将按 service.name ASC -then- property.sort 排序

目前不完整的查询是:

SELECT s.id, s.name, p.id, p.name, props.value 
FROM service.s 
LEFT JOIN propnames p ON s.id = p.sid 
LEFT JOIN props ON props.pid = p.id 
ORDER BY s.name ASC, p.sort ASC

最佳答案

使用交叉连接 生成行。然后使用 left join 查找匹配项:

select s.id, s.name, p.id, p.name, props.value 
from services s cross join
     propnames p left join
     props
     on props.sid = s.id and props.pid = p.id;

关于mysql - 加入 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41133575/

相关文章:

php - 在 php 中放置一个表格,第一行

php - 在网页上的 HTML 表中显示 MySQL 数据库表中的值

php - 在不刷新页面的情况下形成验证码

c# - LINQ 查询限制从 - 到结果

php - 我应该每次都检查变量长度吗?

mysql - 将一个表中的 SUM 值与另一个表中的变量相乘

mysql - MySQL查询多列索引表

mysql - 库存的订单触发(更新)

php - Paypal IPN 数据未进入数据库

php - 如何使用 AngularJS 和 php 后端插入表格