2016-11-21 97 views
0

如何將D1與D2進行比較並將結果用作查詢的一部分。將SQL查詢與當前查詢值進行比較

Select A.id, 
(Select b.date from b,c where b.id=c.id and c.id = E.id and b = 1) as D1, 
(Select b.date from b,c where b.id=c.id and c.id = E.id and b = 2) as D2 
from 
A,E 

我想用JOIN語法,而不是老式逗號拿到D1和D2

Select A.id, 
CASE 
WHEN D1 >= D2 
THEN D2 
WHEN D2 > D1 
THEN D1 
END 
FROM A,E 
+2

無連接條件? – jarlh

+0

你從哪裏學到了這個連接語法?它在二十多年前被取消了。改爲使用顯式的ANSI連接(即'從b連接c到b.id = c.id'和'從交叉連接e'''),以使查詢更具可讀性並且不易出錯。 –

+1

仍然連接,即交叉連接。 – jarlh

回答

1

退房的LEAST function

SELECT id, LEAST(d1, d2) FROM (
    Select A.id, 
    (Select b.date from b,c where b.id=c.id and c.id = E.id and b.id = 1) as d1, 
    (Select b.date from b,c where b.id=c.id and c.id = E.id and b.id = 2)) as d2 
    from 
    A,E 
) 
0

使用sub-select

select id, 
     CASE WHEN D1 >= D2 THEN D2 ELSE D1 END 
From 
(
/* Your Query */ 
) A 

開始的下分開加入。這是正確的方式做到這一點

SELECT A.id, 
     D1, 
     D2, 
     Least(D1, D2) 
FROM A CROSS JOIN E 
     LEFT JOIN (SELECT Max(CASE WHEN b = 1 THEN date END) AS D1, 
         Max(CASE WHEN b = 2 THEN date END) AS D2, 
         E.Id 
        FROM b 
         INNER JOIN c 
           ON b.id = c.id 
        WHERE b IN (1, 2) 
        Group by E.Id) D 
       ON c.id = D.id 
1

我想你也許想是這樣的:

Select A.id, min(b.date) 
from A 
cross join b 
join c on b.id = c.id 
join E on c.id = E.id 
where b in (1,2) 
group by A.id 
+0

我不知道你爲什麼包括colN?這與OP問題看起來沒有關係。 –

+0

@JuanCarlosOropeza - 是的,我重新閱讀,看到他想要日期欄。 – Hogan

+0

好吧,林不知道這是否是因爲沒有提供數據樣本,但非常聰明的結果OP要的;) –