2017-05-03 4 views
2

Ergebnis. Table1, von dem ich die Auswahl vonaus einer Tabelle auswählen und einen Nachschlag in einer anderen Tabelle tun, und ich habe zwei Tabellen in der Ausgabe

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 

Und Table2, die ich für die Suche verwenden möchten

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

In der Ausgabe würde ich

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 

Grundsätzlich haben möchte, für jeden Zeile in Tabelle 1 ich möchte Status von Table2 setzen, wo

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

Ich möchte nicht verwenden „Join“, so ist es eine andere Möglichkeit, es zu tun?

Danke!

+4

Warum Sie nicht verwenden möchten 'join'? Das ist der naheliegende Ansatz. –

+0

Wie Tab Alleman bereits gesagt hat, können Sie in diesem speziellen Fall stattdessen eine korrelierte Unterabfrage verwenden. – jarlh

Antwort

-1

Ich möchte nicht "Join" verwenden, also gibt es einen anderen Weg, es zu tun?

Ja, wenn Sie kein JOIN verwenden möchten, können Sie eine Unterabfrage verwenden.

0

Die offensichtliche Lösung zu verwenden ist beitreten, aber da Sie nicht wollen,

Option 1

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

beitreten verwenden, aber das ist immer noch im Grunde eine Verknüpfung, stenografie nur

Option2

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

Aber das funktioniert nur, wenn die Unterabfrage 1 Zeile zurückgibt und ich th Art und Weise langsamer

+0

Langsamer oder nicht hängt von den verwendeten dbms ab. Verschiedene Produkte optimieren auf unterschiedliche Weise. – jarlh

0

Mit Unterabfrage muss:

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 

mit einem Join ist eigentlich die beste Lösung

Sie auch eine Unterabfrage machen kann oder wo Anweisung verwenden, aber es ist eine sehr schlechte Art und Weise tun es

dann können Sie tun

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

aber es ist eine sehr schlechte Art und Weise zu tun ... wie Sie wollen

+0

Beide sind verbindet ... – jarlh

+0

@jarlh der zweite ist ein „fake“ join keine wirkliche aber ja es funktioniert die gleiche eine Unterabfrage mit einer widerlichen Art und Weise ist es, diese Anfrage zu tun. Wo hören Sie auch gute Praktiken zu lehren – RomMer

+1

Es ist ein Beitritt, vertrau mir. (Ein impliziter, statt ein explizite beitreten.) – jarlh

Verwandte Themen