2017-05-26 11 views
1

私は理解できないJOIN文を使用しています。2つのselect文を1つのJOIN文に書き換えます。JOIN文

最新の(最新の)エントリを2つの異なるテーブルに入れ、結果を出力に結合したいと考えています。

2 Selectステートメントはこのように見えますが、期待通りに動作しますが、JOINステートメントとしてrewiteしようとすると正しい結果を得られないようです。

ご協力ありがとうございます。

SELECT MaxNum 
FROM table1 
WHERE UserID = 4 
ORDER BY Date DESC 
LIMIT 1 

SELECT MinNum 
FROM table2 
WHERE UserID = 4 
ORDER BY Date DESC 
LIMIT 1 
+1

あなたにも労働組合を使用することができますマックス(states.Id)を選択 – inarilo

+0

、最大(City.id)米国 からインナーCity.StateCode = states.code どこ状態に市に参加します。 code = 'AL'、それはあなたが必要とするものですか? –

答えて

0

これらのクエリのそれぞれが一列のみを返しますので、あなたが使用できる1つの汚いトリックはcross join結果にある:私は必ずしも参加がここに理にかなっていることはよく分からない

SELECT MaxNum, MinNum 
FROM (SELECT MaxNum 
     FROM  table1 
     WHERE UserID = 4 
     ORDER BY Date DESC 
     LIMIT 1) t 
CROSS JOIN (SELECT MinNum 
      FROM  table2 
      WHERE UserID = 4 
      ORDER BY Date DESC 
      LIMIT 1) s 
1

。あなたはFROM句でサブクエリとしてあなたのクエリを使用し、その後1行として結果を表示したい場合は

SELECT 
    (SELECT MaxNum FROM table1 WHERE UserID = 4 ORDER BY Date DESC LIMIT 1) AS MaxNum, 
    (SELECT MinNum FROM table2 WHERE UserID = 4 ORDER BY Date DESC LIMIT 1) AS MinNum 
0

:しかし、あなたは少しあなたが現在のクエリーでなければならないものを変更することができます。

SELECT * 
FROM 
    (SELECT MaxNum FROM table1 WHERE UserID = 4 ORDER BY `Date` DESC LIMIT 1) AS q1, 
    (SELECT MinNum FROM table2 WHERE UserID = 4 ORDER BY `Date` DESC LIMIT 1) AS q2; 
0
select TOP 1 table1.MaxNum, table2.MinNum 
FROM table1 INNER JOIN table2 
ON table1.UserID = table2.UserID 
WHERE table1.UserID = 4 
ORDER BY table1.Date DESC 
+0

table2の日付も降順にソートする必要があります – inarilo