作爲SQL的初學者,我可以做簡單的任務,但我現在正在努力與多個嵌套查詢。 我的問題是,我有3個表是這樣的:嵌套查詢和加入
一個Case
表:
id nd date username
--------------------------------------------
1 596 2016-02-09 16:50:03 UserA
2 967 2015-10-09 21:12:23 UserB
3 967 2015-10-09 22:35:40 UserA
4 967 2015-10-09 23:50:31 UserB
5 580 2017-02-09 10:19:43 UserA
一個Value
表:
case_id labelValue_id Value Type
-------------------------------------------------
1 3633 2731858342 X
1 124 ["864","862"] X
1 8981 -2.103 X
1 27 443 X
... ... ... ...
2 7890 232478 X
2 765 0.2334 X
... ... ... ...
和Label
表:
id label
----------------------
3633 Value of W
124 Value of X
8981 Value of Y
27 Value of Z
顯然,我想加入這些桌面ES。所以,我可以做這樣的事情:
SELECT *
from Case, Value, Label
where Case.id= Value.case_id
and Label.id = Value.labelValue_id
,但我得到幾乎一切,而我想更具體。
我想要的是對Case
表進行一些過濾,然後使用生成的ID來加入其他兩個表。我想:
- 濾波器
Case.nd
的這樣,如果有相同的Nd serveral的情況下,採取最古老的一個, - 限次的查詢次數。例如,我希望能夠加入2,3,4等不同nd的表格。
- 使用此查詢可以對
Value
和Label
表進行聯接。
例如,查詢1和2的輸出將是:
id nd date username
--------------------------------------------
1 596 2016-02-09 16:50:03 UserA
2 967 2015-10-09 21:12:23 UserB
如果我要求2不同次。 nd 967出現好幾次,但我們拿最老的一個。
事實上,我想我已經找到了如何做所有這些事情,但我不知道如何合併它們。
要選擇最舊的第二,我可以做成纔等:
select min((date)), nd,id
from Case
group by nd
然後,以限制輸出ND的數目,我發現這個(基於this和that):
select *,
@num := if(@type <> t.nd, @num + 1, 1) as row_number,
@type := t.nd as dummy
from(
select min((date)), nd,id
from Case
group by nd
) as t
group by t.nd
having row_number <= 2 -- number of output
它的工作原理,但我覺得它變慢了。
最後,當我試圖與這個子查詢和另外兩個表進行連接時,處理一直持續下去。
在我的研究中,我可以找到問題的每個部分的答案,但我不能合併它們。另外,對於「計數」問題,我想限制nd的數量,我覺得這是一種很遙遠的方式。
我意識到這是一個很長的問題,但我想我錯過了一些東西,我想盡可能地提供細節。
從任何基本的書或教程開始。特別注意JOIN。 – Strawberry