我如何加入这些MYSQL表?

时间:2014-10-15 12:11:47

标签: mysql

我有两张桌子。表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的表名和列名,因此您可以轻松阅读,因此可能存在打破现在查询的拼写错误

3 个答案:

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