-1

我有2张桌子如下T1 and T2.

T1 has one field as A  and T2  has one field B.

现在我想做以下事情:对于T1.A我想加入的每个值T2.B

就像是 :

select * from T1 ,(select * from where T2 where T2.B = T1.A)

这个对吗?当我尝试这个时,我收到一条错误消息T1.A is invalid indentifier

我知道我能做到select * from T1,T2 where T1.A = T2.B

但是我的用例非常复杂。查询 ( select * from where T2 where T2.B = T1.A) 非常复杂。

那么我该怎么做呢?

4

5 回答 5

2

你只需要JOIN表格:

select * 
from T1 
inner join T2 
  on T2.B = T1.A

如果您在学习JOIN语法方面需要帮助,这里有一个很好的 joins 可视化解释

我使用了一个INNER JOIN将返回在T1和之间匹配的行T2。即使没有匹配的行,您也可能需要使用LEFT JOIN将返回所有行的T1T2

如果您有另一个查询可供选择,那么您可以使用子查询:

select * 
from T1 
inner join
( 
   -- place your query here
   select *
   from T2
) T2 
  on T2.B = T1.A

如果您的子查询只返回一列,那么您可以使用:

select t1.*, (select t2.col1 from T2 t2 where t2.B = t1.A) 
from T1 t1
于 2013-01-22T16:52:35.673 回答
1

除非我弄错了,否则你不能只使用JOIN

select * 
from t1 
join t2 on t1.field = t2.field

祝你好运。

于 2013-01-22T16:52:15.177 回答
0

select A,T1.B,(select * from where T2 where T2.B = T1.A) FROM T1 。这有帮助吗?

于 2013-01-22T17:00:00.480 回答
0
select * from first_table inner join second_table on first_table.X = second_table.Y
于 2013-01-22T16:55:40.047 回答
0

你可以做

select * 
from T1 
inner join T2 
  on T2.B = T1.A

正如其他人所说。但是,仅出于可读性考虑,此“ON”版本是首选。

你也可以继续使用

select * from T1,T2 where T1.A = T2.B

优化器会弄清楚,并做同样的事情,因为查询是等价的。

您可以继续使用它,因为它没有任何问题。

于 2013-01-22T16:55:25.183 回答