繁体   English   中英

使用 join 从多个表中获取记录

[英]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

解释:

  • 您的用户位于 2 个表中 - tbl_user 和 tbl_contestant
  • 因此,您必须使用 UNION(删除重复项)组合用户
  • 然后,您可以加入您的购买表

示例: https : //rextester.com/RKHXL43587

尝试这个。 因为你的名字不在一个表中所以 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM