【问题标题】:SQL join left and rightSQL 左右连接
【发布时间】:2016-11-10 11:03:22
【问题描述】:

这是我的查询:

select distinct * 
from purchase_records a 
inner join purchase_items b on a.id = b.purchase_id 
left join transactions c on a.id= c.purchase_id

它从两个表中获取记录。从左边获取一条记录,从右边获取多于一条的记录数。

问题是当表返回记录时,它匹配确切的记录,但根据行的左侧重复行的右侧。

如何在左侧获取一条记录,在右侧获取多条记录?我希望我的左连接显示一条记录,右连接显示数据库中的记录。

【问题讨论】:

  • 左连接第一个表,右连接第二个表
  • 试过还是会重复
  • 试试下面发布的答案
  • 您的 sql 脚本从 3 个表中获取数据,但您的描述从 2 个表中获取?我不确定您对联接的期望,但联接的左侧将针对联接右侧找到的每条记录重复,
  • 删除该图像。给我们示例表数据和预期结果以及格式正确的文本。

标签: php mysql sql


【解决方案1】:

你可以试试……

    select A.*,B.add1,C.add2 from(
    select 1 id,'A' name union
    select 2 ,'B'  union
    select 3 ,'C' union
    select 4 ,'D') A
    left join 
    (select 1 id,'A' name,'z' add1 union
    select 5 ,'B' ,'zz'  union
    select 6 ,'C' ,'zzz' union
    select 4 ,'D' ,'zzzz')B on A.id=B.id
    right join
    (select 1 id,'A' name,'1z' add2 union
    select 5 ,'B' ,'1zz'  union
    select 6 ,'C' ,'1zzz' union
    select 4 ,'D' ,'1zzzz')C on C.id=A.id

或喜欢..

select A.columns,B.columns,C.columns from your_table1 A
left join your_table2 B on A.id=B.id
right join your_table3 C on C.id=A.id

【讨论】:

  • 请解释你的逻辑 - OP显然坚持这一点。仅代码的答案只会鼓励复制/粘贴文化,但对于 OP 和其他阅读者学习和理解推理也是有好处的:-)
  • 没有什么可以解释的火箭科学......这只是一个非常简单的左右连接示例
  • 也许,但 OP(和未来的读者)可能不理解为什么您的示例可能有效而他们的示例无效背后的基本原理。如果您没有使用 SQL 的经验,那可能并不明显。此外,您还给出了两个示例,因此解释差异也可能会有所帮助。
  • @usman..我不知道你的数据/CAS我只是在例子中拿了一些演示行..发布你的一些数据和你想要的结果
猜你喜欢
  • 1970-01-01
  • 2021-03-10
  • 2016-12-13
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多