2017-11-16 19 views
1

ネストされたクエリを使用して2つのクエリを結合しようとしています。SQLのネストされたクエリ

Mach ShortenCode Tme 
Mach1 451   2017-12-25 08:25 
Mach2 854   2017-12-25 08:25 

だから451はMACH1上で結果を生成

SELECT DISTINCT(de.MCH_CODE) AS Mach, md.MAT_CODE as ShortenCode, de.TIME as start_time 
FROM table1 AS de 
JOIN table1table2 AS md 
ON de.subcode= md.subcode 
WHERE de.ev = '123' AND de.time > '2017-11-14 07:00' and de.side = 'R' AND de.end IS NULL AND de.Subcat = 'STOP' 
ORDER BY de.time 

: 最初のものはこれです。トリッキーな部分は、ShortenCodeのために、以前のMachが表示されていることを示したいと思います。私が取得する副問合せすることができますどのように

SELECT distinct de.MCH_CODE FROM table1 AS de 
join table2 as md 
ON de.subcode = md.subcode 
WHERE de.ShortenCode = 'the ones displayed in the first query' 

:それはようなものになるだろう

Mach ShortenCode Tme     Mach(Previous)  
Mach1 451   2017-12-25 08:25 Mach4 
Mach2 854   2017-12-25 08:25 Mach5 

Basilyマッハ列はMACH1、MACH2ともMach4とMACH5を持っています。 私はこれを試みたが、成功しませんしました:

SELECT t1.Mach, t1.ShortenCode, t1.start_time, t2.PreviousMach 
    FROM(SELECT DISTINCT(de.MCH_CODE) AS Mach, md.MAT_CODE as ShortenCode, de.TIME as start_time, mch_ 
      FROM table1 AS de 
      JOIN table1table2 AS md 
      ON de.subcode= md.subcode 
      WHERE de.ev = '123' AND de.time > '2017-11-14 07:00' and de.side = 'R' AND de.end IS NULL AND de.Subcat = 'STOP' 
      ORDER BY de.time 
    ) t1 
    join 
     (SELECT distinct de.MCH_CODE FROM table1 AS de 
       join table2 as md 
       ON de.subcode = md.subcode 
       WHERE de.ShortenCode = t1.ShortenCode 
     ) t2 

あなたは、私は非常に多くの

+3

「DISTINCT」は**機能ではありません(列上)。これは 'SELECT DISTINCT'の一部であり、選択された行全体に適用されます。これらの冗長な括弧を削除します。たとえば、 'SELECT DISTINCT de.MCH_CODE AS Mach、... 'を削除します。 – jarlh

+0

、ありがとう@jarlh。クエリのロジックはどうですか?これは、2つを組み合わせる正しい方法です – Christian

+1

私はリバースエンジニアリングクエリが嫌いです。参照:[私は非常に単純なSQLクエリと思われるものに対してMCVEを提供するのはなぜですか?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve- for-what-like-to-a-very-simple-sql-query) – Strawberry

答えて

0

、あなたの答えを得るために、以下のクエリを使用することができますをいただければ幸いです任意の提案がある場合。

SELECT distinct de.MCH_CODE FROM table1 AS de 
join 
table2 as md 
ON de.subcode = md.subcode WHERE de.ShortenCode 
in 
(
    select Table2.ShortenCode from 
    (
    SELECT DISTINCT de.MCH_CODE AS Mach, md.MAT_CODE as ShortenCode, de.TIME as start_time 
    FROM table1 AS de 
    JOIN table1table2 AS md 
    ON de.subcode= md.subcode 
    WHERE de.ev = '123' AND de.time > '2017-11-14 07:00' and de.side = 'R' AND de.end IS NULL AND de.Subcat = 'STOP' 
    ORDER BY de.time 
    ) Table2 
) 
+0

確かに、コピー貼り付けエラーです。ありがとう –

関連する問題