2009-08-04 1 views
0

ok so ist es das, was ich versuche, zwei zu haben, SELECT-Anweisungen zu erreichen ist, und dann Ergebnisse jeden beitreten, so etwas wie Ich habe dieseSQL-Anweisung Teaser

SELECT table.ID, tst.Value 
FROM blah AS table JOIN results AS tst ON tst.RUNID = table.RUNID 
WHERE table.RUNID IN 
(
    ...// nothing important but in the end i get my tst.Value 
) 

zweite Aussage ist fast identisch

SELECT table.ID, tst2.Value 
FROM blah AS table JOIN results AS tst2 ON tst2.RUNID = table.RUNID 
WHERE table.RUNID IN 
(
    ...// nothing important but in the end i get my tst2.Value differently 
) 

ich brauche diese beiden Ergebnisse im Format von

SELECT table.ID, tst.Value, tst2.Value 
...... // Somehow using those two statements 

So jemand fließend in SQL lang zu kombinieren jemand, der mir sagen könnte, wie man das macht oder welche Statements ich verwenden soll ... Join Sound wie ein guter Anfang, aber sie benutzen Tabellen. Ich glaube, ich könnte eine Tabelle von SELECT CREATE und kommen aber wie gesagt, ich bin nicht fließend in SQL so frage mich, ob das ist eine gute Idee oder eine bessere Idee ist ...

Thanks :)

+0

Sollte einer der beiden Werte null sein, wenn die ID nicht in der entsprechenden Tabelle vorhanden ist, oder sollte dieses Ergebnis verworfen werden? –

+0

sie müssen koexistieren nach Design der Tabelle – grobartn

Antwort

3

Die einfachste Methode (von dem, was Sie beschrieben haben) wäre um die IN-Klausel in Ihre Join-Bedingung zu verschieben und dies alles in einer Abfrage auszuführen. Wie folgt aus:

select 
    table.ID, 
    tst.Value as Value1, 
    txt2.Value as Value2 

from blah table 

left join results tst on tst.RUNID = table.RUNID and tst.RUNID in (...first conditions...) 
left join results tst2 on tst.RUNID = table.RUNID and tst2.RUNID in (...second conditions...) 

ist diese Struktur ein wenig unsinnig mir (da Sie die Werte aus dem Wurzeltabelle sind Filterung unterschiedlich jedes Mal). Könnten Sie die tatsächliche Struktur und SQL für uns zu buchen? Das könnte es klarer machen.

+0

Mein Problem damit ist das gleiche wie mein Problem mit Toms Antwort.Wenn man auf diese Weise füge, werden 'tst' und' tst2' durch ihre 'RUNIDs' verknüpft, von denen ich annehme, dass sie notwendigerweise anders sind (möglicherweise überlappend, aber unterschiedlich), basierend auf der Struktur der ursprünglichen zwei Abfragen des OPs. Die linken Joins sind ein guter Weg, um damit umzugehen, aber die Datensätze müssen möglicherweise an 'table.ID' und nicht an 'RUNID' angefügt werden. Es liegt aber am OP zu entscheiden, also kein Downvote oder Upvote von mir. – Welbog

+0

Ich kann den tatsächlichen Code nicht anzeigen ... aber das Design der Datenbank zwingt mich dazu. danke! – grobartn

+0

@Welbog: Die Syntax hier wurde aus dem Post des OP genommen. So kamen sie zusammen. Ich bin mir nicht sicher, warum Sie glauben, dass sie mit der ID verbunden werden müssen, ohne Informationen über das Schema des Posters zu haben, die über die Liste hinausgehen. –

0

Dies sollte arbeiten für Sie:

SELECT table.ID, tst.Value, tst2.Value 
FROM blah AS table 
Inner JOIN results AS tst ON tst.RUNID = table.RUNID 
Inner JOIN results AS tst2 ON tst2.RUNID = table.RUNID 
WHERE table.RUNID IN 
( 
    ...// nothing important but in the end i get my tst2.Value differently 
) 
0

Es ist möglich, mehr als ein JOIN in einer Abfrage zu verwenden. Dies sollte deine Frage lösen.

1

Der naive Ansatz, table.ID unter der Annahme ist, was die beiden value Felder betrifft:

SELECT first_subquery.ID, first_subquery.Value, second_subquery.Value 
FROM (
    SELECT table.ID, tst.Value 
    FROM blah AS table JOIN results AS tst ON tst.RUNID = table.RUNID 
    WHERE table.RUNID IN 
    (
    ...// nothing important but in the end i get my tst.Value 
) 
) first_subquery 
INNER JOIN (
    SELECT table.ID, tst2.Value 
    FROM blah AS table JOIN results AS tst2 ON tst2.RUNID = table.RUNID 
    WHERE table.RUNID IN 
    (
    ...// nothing important but in the end i get my tst2.Value differently 
) 
) second_subquery 
ON first_subquery.ID = second_subquery.ID 

Diese Abfrage auf beide von Ihnen basiert, miteinander verbunden sind.

+0

Wenn jemand darauf hinweisen kann, warum das nicht funktioniert, werde ich meine Upvote ... –

+0

+1, sollte gut funktionieren, fast das gleiche wie meins –

0

versuchen so etwas wie:

SELECT table.ID, tst.Value, dt.Value 
    FROM blah AS table 
     JOIN results AS tst ON tst.RUNID = table.RUNID 
     left outer join (
         SELECT table.ID, tst2.Value 
          FROM blah AS table 
           JOIN results AS tst2 ON tst2.RUNID = table.RUNID 
          WHERE table.RUNID IN( ...// nothing important but in the end i get my tst2.Value differently) 
         ) dt ON table.id=dt.ID 
    WHERE table.RUNID IN( ...// nothing important but in the end i get my tst.Value ) 
+0

wow, 4 Leute bekommen Stimmen ungefähr zur gleichen Zeit, ohne Gründe aufgeführt ??? –

+1

@KM - Dies ist offenbar eine gefährliche Frage zu beantworten. Ich denke darüber nach, meine Antwort zu löschen, bevor ich ein Drive-by-Downvote bekomme. –

+0

+1. Obwohl naiv, ist dieser Ansatz ungefähr der gleiche wie meine Antwort. Es wäre für mich nicht sehr sportlich, nicht die Leute zu belohnen, die genauso denken wie ich. – Welbog

-1

Try this ...

SELECT T1.ID, R1.Value, 
     T2.RunId, R2.Value 
FROM (blah AS T1 JOIN results AS R1 
     ON R1.RUNID = table.RUNID 
      And T1.RUNID IN (/... /)) 
    Cross Join (blah AS T2 JOIN results AS R2 
     ON R.RUNID = T2.RUNID 
      And T2.RunId In (/... /)) 
-1

Try this:

select a.ID, a.Value, b.Value from 
(
    SELECT table.ID, tst.Value 
    FROM blah AS table JOIN results AS tst ON tst.RUNID = table.RUNID 
    WHERE table.RUNID IN 
    (
    ...// nothing important but in the end i get my tst.Value 
) 
) a, 
(
    SELECT table.ID, tst2.Value 
    FROM blah AS table JOIN results AS tst2 ON tst2.RUNID = table.RUNID 
    WHERE table.RUNID IN 
    (
    ...// nothing important but in the end i get my tst2.Value differently 
) 
) b 
Verwandte Themen