【问题标题】:Joining multiple tables which satisfies multiple columns in both the tables连接满足两个表中的多个列的多个表
【发布时间】:2015-01-28 09:06:20
【问题描述】:

我想从具有相似列的两个表中获取数据。

Table A

x   y   z  a  b  

1   48 36  d5 8d  
2   78  36 2t 15
3   99  54  s5  14
4   48  73  58  11



Table B

x   y   z  a  b  

1   48 95  d9 69  
2   98  36 3c vv
3   93  39  df  1bb
4   48  73  58  11

当列y=48,z=73,a=58,b=11 时,我想从表中获取y,z,b 值。 我像这样使用join query,但它不起作用。

Select x,y,z,a,b from A join B in A.y=B.y=48 and A.z=B.z=73 and A.a=B.a=58 and A.b=B.b=11;

你能给我正确的解决方案吗

【问题讨论】:

  • 加入ON,而不是IN,是正确的语法! = 只有两个值。
  • and A.z=B.z=73 完全错误。

标签: java sql database join


【解决方案1】:

连接是通过ON 关键字定义的,而不是使用IN。您还混合了连接条件和过滤条件。 a=b=x 在 SQL 中不起作用。

您还需要完全限定选择列表中的列,否则您会收到列名不明确的错误。

Select a.x, a.y, a.z, a.a, a.b 
from A 
  join B on A.y=B.y 
        and A.z=B.z 
        and A.a=B.a 
        and A.b=B.b
where a.y = 48
  and a.z = 73
  and a.a = 58
  and a.b = 11

您的评论“其中有一个类似的列”似乎表明实际上应该只通过 x 列而不是基于您要过滤的所有列来完成连接: p>

所以你可能真的想要:

Select a.x, a.y, a.z, a.a, a.b 
from A 
  join B on a.x = b.x -- only use `x` for the join condition
where a.y = 48
  and a.z = 73
  and a.a = 58
  and a.b = 11

【讨论】:

    【解决方案2】:

    下面试试

    SELECT
        A.X,
        B.Y,
        A.Z,
        A.A,
        A.B
    FROM
        A,
        B
    WHERE A.Y=B.Y AND A.Y=48
    AND A.Z=B.Z AND A.Z=73
    AND A.A=B.A AND A.A=58
    AND A.B=B.B AND A.B=11;
    

    【讨论】:

    • 您应该真正习惯于在FROM 子句中显式地使用JOIN 运算符,而不是在WHERE 子句中使用过时的隐式连接
    猜你喜欢
    • 1970-01-01
    • 2018-05-11
    • 2018-05-08
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多