[英]Fetch records from multiple tables using join
我有三个表,例如“ tbl_purchase ”、“ tbl_user ”和“ tbl_contestant ”。 我需要tbl_purchase所有的记录与“名”有两个表“tbl_user”和“tbl_contestant”。
我的查询,
SELECT tp.*, tu.*
FROM tbl_purchase tp
INNER JOIN tbl_user tu
ON tu.user_id = tp.user_id
表:tbl_purchase
+-------+-------------+------+
| p_id | user_id | Star |
+-------+-------------+------+
| 1 | 1 | 50 |
| 2 | 4 | 100 |
| 3 | 6 | 150 |
+-------+-------------+------+
表:tbl_user
+-------+-------------+
| u_id | name |
+-------+-------------+
| 1 | Sachin |
| 4 | Akshay |
+-------+-------------+
表:tbl_contestant
+-------+-------+-------------+
| c_id | u_id | Name |
+-------+-------+-------------+
| 1 | 6 | Mayank |
| 2 | 8 | Nikhil |
| 3 | 9 | Vipul |
+-------+-------+-------------+
我想要以下结果,
+-------+-------+-------------+------+
| p_id | u_id | Name | Star |
+-------+-------+-------------+------+
| 1 | 1 | Sachin | 50 |
| 2 | 4 | Akshay | 100 |
| 3 | 6 | Mayank | 150 |
+-------+-------+-------------+------+
试试这个 SQL 查询:
select p.p_id, u.u_id, u.name, p.star
from tbl_purchase p
inner join (
select u_id, name from tbl_user
union
select u_id, name from tbl_contestant
) u on p.user_id = u.u_id;
结果:
p_id u_id name star
1 1 Sachin 50
2 4 Akshay 100
3 6 Mayank 150
解释:
尝试这个。 因为你的名字不在一个表中所以 leftJoin 用户和参赛者表。 正如@Akina在评论中所说的那样, COALESCE从列表中返回第一个非空值参考
select tbl_purchase.p_id,
tbl_purchase.user_id as u_id,
COALESCE(tbl_user.name, tbl_contestant.Name) as name
from tbl_purchase
LEFT JOIN tbl_user ON tbl_user.u_id = tbl_purchase.user_id
LEFT JOIN tbl_contestant ON tbl_contestant.u_id = tbl_purchase.user_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.