2017-05-03 74 views
2

我有两个表。 表1从我从从一个表中进行选择并查找另一个表并在输出结果中获得结果

Number  Code  Prefix  Area  Date 
987654321 333  691   SOF  20170503 
445  661   VAR  20170503 
765432110 678  611   BOR  20170503 
753357891 333  691   SHU  20170502 
667788223 445  661   ZOR  20170502 
812567111 678  611   NES  20170501 

和Table,我想用于查找

Code  Prefix  Type  Terminal 
333  691   F   NP 
445  661   M   P 
678  611   F   P 

在输出选择我想有

Table1.Number  Table1.Code  Table1.Prefix  Table2.Status 
987654321   333    691    F 
    445    661    M 
765432110   678    611    F 
753357891   333    691    F 
667788223   445    661    M 
812567111   678    611    F 

基本上,每个Table1中的行我想把Table2的状态,其中

Table1.Code = Table2.Code and Table1.Prefix = Table2.Prefix 

我不想使用“加入”,那么还有其他方法可以做到吗?

谢谢!

+4

为什么你不想使用'join'?这是显而易见的方法。 –

+0

正如Tab Alleman已经说过的,在这种特定情况下,您可以使用相关的子查询。 – jarlh

回答

-1

我不想使用“加入”,那么有没有其他方法可以做到这一点?

是的,如果你不想使用JOIN,你可以使用子查询。

0

显而易见的解决方案是使用加入,但因为你不希望使用加入

选项1

select 
    Table1.Number, 
    Table1.Code, 
    Table1.Prefix, 
    Table2.Status 
from Table1, Table2 
where Table1.Code = Table2.Code 
and Table1.Prefix = Table2.Prefix 

但这仍然是一个basicly加入,只有速记

选项2

select 
    Number, 
    Code, 
    Prefix, 
    (
     select Status 
     from Table2 
     where Code = Table1.Code 
     and Prefix = Table1.Prefix 
    ) as Status 
from Table1 

但是,这只适用于如果子查询返回1行,我想th是必须的方式较慢

+0

更慢或者不取决于所使用的dbms。不同的产品以不同的方式优化。 – jarlh

0

随着子查询:

SELECT 
Number, 
Code, 
Prefix, 
(SELECT Table2.Type 
FROM Table2 
WHERE Table1.Code = Table2.Code AND Table1.Prefix=Table2.Prefix 
) AS Status 
FROM Table1 
0
SELECT Table1.Number, Table1.Code, Table1.Prefix, Table2.Status 
FROM Table1 
LEFT JOIN Table2 ON Table2.Code = Table1.Code 

使用连接实际上是最好的解决办法

你也可以做一个子查询或使用WHERE语句,但它是一个非常糟糕的方式做

那么你可以做

SELECT Table1.Number, Table1.Code, Table1.Prefix, Table2.Status 
FROM Table1, Table2 
WHERE Table1.Code = Table2.Code 
    AND Table1.Prefix = Table2.Prefix 

但是这是一个非常糟糕的方式......按照你想要的

+0

两者都是加入... – jarlh

+0

@jarlh第二个是“假”加入不是一个真正的,但是是它的作品相同 使用子查询是一个令人厌恶的方式来做这个请求。哪里也听到教好的做法 – RomMer

+1

这是一个加入,相信我。 (一个隐式的,而不是一个明确的连接。) – jarlh

相关问题