2017-03-03 84 views
0

我有兩個表可以用一個鍵鏈接。問題是1個表也是時間片。我只需要從這張表中選擇2行,但是在不同的時間它們會重複很多次。所以我想從這個表中選擇一個不同的值並將其鏈接到另一個值。 我嘗試做:結合select和select加入不同

SELECT a.firstcolumn, 
     a.secondcolumn, 
     b.somecolumn 
from table1 a 
INNER JOIN (SELECT DISTINCT somecolumn from table2) b 
    on a.key = b.key 

運行此代碼,但我得到了太多的記錄(幾乎兩倍),因此不同的是不是莫名其妙地做它的工作。 我想輸出包含a.firstcolumn,a.secondcolumn和b.somecolumn

+1

由於您不選擇任何table2列,您可以使用EXISTS而不是JOIN。 – jarlh

+0

如果你只想要2行,那麼爲什麼不嘗試LIMIT? –

+0

@jarlh。 。 。該OP澄清說,從b列是在輸出,所以我補充說。 –

回答

0

這是太長的評論。如果你有一個時間片表,目的是有一個選擇值的日期/時間。通常最近的值是end_dt(因爲缺乏更好的術語)遠未來或者NULL

不知道你的數據結構,我希望這樣的事情:

SELECT a.firstcolumn, a.secondcolumn, b.somecolumn 
FROM table1 a JOIN 
    b 
    ON a.key = b.key AND b.end_dt IS NULL; 
+0

是的,我想過,但我不能相信數據列填寫得好。 –

0

可能掉落不同,並採取日期字段的最大(小)會給你你所需要的。

SELECT a.firstcolumn, 
     a.secondcolumn, 
     b.somecolumn 
from table1 a 
INNER JOIN (SELECT key, somecolumn, max(date) from table2 group by key, somecolumn) b 
    on a.key = b.key 
+0

這將工作,如果日期字段將被正確填寫。我也有DATETO =「99991231」或DATETO =「18991231」,這也可能是重複的。 –

+0

@GertKnoops我認爲即使日期不正確,它仍然可以工作。只要該字段是日期或數字數據類型,它將只使用最大值或最小值。由於您在最終輸出中丟棄了數據,因此使用日期無效的記錄並不重要。 –