连接多个表,这些表满足两个表中的多个列

时间:2015-01-28 09:06:21

标签: java sql database join

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

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,z,b时从表中获取y=48,z=73,a=58,b=11值。 我使用了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;

你能给我正确的解决方案

2 个答案:

答案 0 :(得分:2)

通过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列完成,而不是基于您要过滤的所有列:

所以你可能真的想要:

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

答案 1 :(得分:-1)

尝试以下

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;