我有两张桌子。表A包含为活动预订的人员列表,表B列出了来自表A的预订者带来的人员列表。这两个表都有许多具有独特数据的列,我需要在PHP中进行某些计算,到目前为止,我通过使用递归PHP函数对表进行查询来解决它。我希望通过更好的MYSQL查询来简化PHP并减少来自此递归函数的查询量,但我有点卡住了。
因为表格有很多列,所以我会给出表格A的摘录:
booking_id | A_customer | A_insurance
1 | 134 | 4
表B的摘录:
id | booking_id | B_insurance
1 | 1 | 0
2 | 1 | 1
3 | 1 | 1
4 | 1 | 3
表A中的booking_id是唯一的并且设置为自动递增,表b中的booking_id可以多次出现(取决于表A中的客户带给他的客人数量)。假设我想知道来自客户134及其客人的所有选定保险,那么我想要输出如下:
booking_id | insurance
1 | 4
1 | 0
1 | 1
1 | 1
1 | 3
我尝试了几个连接,这是我最接近的,不幸的是,它无法显示A中的行,只显示B中的匹配行。
SELECT a.booking_id,a.A_customer,a.A_insurance,b.booking_id,b.insurance FROM b INNER JOIN a ON (b.booking_id = a.booking_id) WHERE a.booking_id = 134
有人能指出我正确的方向吗?
请注意:我已经更改了stackoverflow的表名和列名,因此您可以轻松阅读,因此可能存在打破现在查询的拼写错误
答案 0 :(得分:1)
我认为你需要一个union all
:
select a.booking_id, a.insurance
from a
where a.a_customer = 134
union all
select b.booking_id, b.insurance
from a join
b
on a.booking_id = b.booking_id
where a.a_customer = 134;
答案 1 :(得分:1)
我能想到的最简单的方法是使用UNION:
SELECT booking_id, A_insurance insurance
FROM A
WHERE booking_id = 134
UNION
SELECT booking_id, B_insurance insurance
FROM B
WHERE booking_id = 134
答案 2 :(得分:1)
由于我对你的iso的理解是正确的,这应该会给你你需要的结果:
SELECT a.booking_id,a.insurance FROM a WHERE a.booking_id = 134
union
SELECT a.booking_id,b.insurance FROM b INNER JOIN a ON (b.booking_id = a.booking_id) WHERE a.booking_id = 134