我怎样才能加入4张桌子
How can I join 4 tables
请帮忙修改以下代码。我想加入这两个 select 查询,以便我可以从两个差异表中获得包含记录的单个输出?我有 4 张桌子,
table_a 具有我必须用于搜索的用户 ID
table_b1 具有 table_c 的外键,它具有我想要获得的名称
table_b2 也有 table_c 的外键,它有我也想得到的第二个名字。
如何在单个输出中合并以下查询?
我的代码
select c.name from table_a a
join table_b1 b1 on a.id=b1.id
join table_c c on b1.pri_id=c.id where a.user='abc'
select c.name from table_a a
join table_b2 b2 on a.id=b2.id
join table_c c on b2.pri_id=c.id where a.user='abc'
也许你可以在这里使用 UnionAll,
select c.name from table_a a
join table_b1 b1 on a.id=b1.id
join table_c c on b1.pri_id=c.id where a.user='abc'
union all
select c.name from table_a a
join table_b2 b2 on a.id=b2.id
join table_c c on b2.pri_id=c.id where a.user='abc'
所以您想要提取 table_c 中表 table_b1 和 table_b2 的名称信息,它们也通过 id 列连接到 table_a。
您需要将 table_c 添加到查询中两次以从 table_b1 和 table_b2 检索名称,因为检索名称的条件不同。
如果 table_b1 和 table_b2 中有信息(以及每个 b 表的 table_c 中有信息,则您只需要名称),查询将是:
SELECT tc1.name name_b1, tc2.name name_b2
FROM table_a ta
JOIN table_b1 tb1 ON ta.id = tb1.id
JOIN table_b2 tb2 ON ta.id = tb2.id
JOIN table_c tc1 ON tb1.pri_id = tc1.id
JOIN table_c tc2 ON tb2.pri_id = tc2.id
WHERE ta.user = 'abc'
如果 table_b1 或 table_b2 中可能并不总是有用户的信息,但无论如何您都想检索信息,当其中一个或两个上没有名称时获取 NULL b 表,你需要左连接:
SELECT tc1.name name_b1, tc2.name name_b2
FROM table_a ta
LEFT JOIN table_b1 tb1 ON ta.id = tb1.id
LEFT JOIN table_b2 tb2 ON ta.id = tb2.id
LEFT JOIN table_c tc1 ON tb1.pri_id = tc1.id
LEFT JOIN table_c tc2 ON tb2.pri_id = tc2.id
WHERE ta.user = 'abc'
请帮忙修改以下代码。我想加入这两个 select 查询,以便我可以从两个差异表中获得包含记录的单个输出?我有 4 张桌子,
table_a 具有我必须用于搜索的用户 ID
table_b1 具有 table_c 的外键,它具有我想要获得的名称
table_b2 也有 table_c 的外键,它有我也想得到的第二个名字。
如何在单个输出中合并以下查询?
我的代码
select c.name from table_a a
join table_b1 b1 on a.id=b1.id
join table_c c on b1.pri_id=c.id where a.user='abc'
select c.name from table_a a
join table_b2 b2 on a.id=b2.id
join table_c c on b2.pri_id=c.id where a.user='abc'
也许你可以在这里使用 UnionAll,
select c.name from table_a a
join table_b1 b1 on a.id=b1.id
join table_c c on b1.pri_id=c.id where a.user='abc'
union all
select c.name from table_a a
join table_b2 b2 on a.id=b2.id
join table_c c on b2.pri_id=c.id where a.user='abc'
所以您想要提取 table_c 中表 table_b1 和 table_b2 的名称信息,它们也通过 id 列连接到 table_a。 您需要将 table_c 添加到查询中两次以从 table_b1 和 table_b2 检索名称,因为检索名称的条件不同。
如果 table_b1 和 table_b2 中有信息(以及每个 b 表的 table_c 中有信息,则您只需要名称),查询将是:
SELECT tc1.name name_b1, tc2.name name_b2
FROM table_a ta
JOIN table_b1 tb1 ON ta.id = tb1.id
JOIN table_b2 tb2 ON ta.id = tb2.id
JOIN table_c tc1 ON tb1.pri_id = tc1.id
JOIN table_c tc2 ON tb2.pri_id = tc2.id
WHERE ta.user = 'abc'
如果 table_b1 或 table_b2 中可能并不总是有用户的信息,但无论如何您都想检索信息,当其中一个或两个上没有名称时获取 NULL b 表,你需要左连接:
SELECT tc1.name name_b1, tc2.name name_b2
FROM table_a ta
LEFT JOIN table_b1 tb1 ON ta.id = tb1.id
LEFT JOIN table_b2 tb2 ON ta.id = tb2.id
LEFT JOIN table_c tc1 ON tb1.pri_id = tc1.id
LEFT JOIN table_c tc2 ON tb2.pri_id = tc2.id
WHERE ta.user = 'abc'