2016-02-17 22 views
0

我有以下查詢,它不工作:SQL子查詢同步和param

SELECT 
    d1.*, iif(d1.PK = MIN(d2.PK), "Si", "No") 
FROM 
    demo AS d1 
LEFT JOIN 
    (SELECT d3.PK, d3.place, d3.date 
     FROM 
      demo AS d3 
     WHERE 
      d3.place=d1.place AND d3.date=d1.date AND d1.type="type1") AS d2 
ON 
    d2.place=d1.place AND d2.date=d1.date 

的一點是與「思」的第一行中的演示表有較具體來說類型和在同一標記地點/日期,其他具有相同值的行應標記爲「否」。看起來,子查詢不會識別de「d1」名稱以正確同步,如果我證明將「d1」valors更改爲常量,那麼存在關於PK和我不明白的聚合函數的錯誤。

對不起,如果很明顯,但SQL不是我最強的一點。感謝您的幫助:)

回答

0

使用,而不是相關子查詢:

select d.*, 
     iif(d.pk = (select min(d2.pk) 
        from demo as d2 
        where d2.place = d1.place and d2.date = d1.date and d2.type = "type1"), 
      "Si", "No") 
from demo as d; 
+0

Thaaanks,似乎很好地工作^^ 但也許有點重來計算。我的電腦在幾分鐘內沒有響應,我會嘗試優化它:( – Mituga

+0

@Miluga ...'demo(地點,日期,類型)'的索引應該有所幫助 –

+0

呃,實際上有幾分鐘大約9個小時,索引被創建爲(place,date),但是我不能爲類型創建索引,因爲這個查詢對另一個計算類型的查詢起作用(這個查詢只需要約3秒的時間來執行)。卡在這裏...... :( – Mituga