2016-10-04 57 views
-1

我不知道爲什麼,但我無法理解它。我有兩個表:SQL多表子查詢

mysql> select * from PETICIONES;                        +--------+------------+--------+-----------+-----------+ 
| ID_PET | FECHA_PET | ID_ANA | DNI_PAC | DNI_DOC | 
+--------+------------+--------+-----------+-----------+ 
|  1 | 2008-01-03 |  2 | 71515623A | 23456398F | 
|  2 | 2008-05-10 |  2 | 33788976F | 55776898K | 
|  3 | 2008-05-08 |  3 | 79876867X | 23456398F | 
|  4 | 2008-05-11 |  4 | 44787345H | 55776898K | 
|  5 | 2008-05-12 |  2 | 19887234W | 25349857H | 
|  6 | 2008-05-05 |  4 | 22897576R | 55776898K | 
|  7 | 2008-03-15 |  5 | 44787345H | 88647389P | 
|  8 | 2008-03-19 |  1 | 71515623A | 23456398F | 
|  9 | 2008-03-26 |  2 | 71515623A | 78988484B | 
|  10 | 2008-03-15 |  2 | 19887234W | 88647389P | 
|  11 | 2008-03-15 |  3 | 33788976F | 55776898K | 
|  12 | 2008-03-26 |  2 | 44787345H | 23456398F | 
+--------+------------+--------+-----------+-----------+ 

mysql> select * from TIPOS_ANALISIS; 
+--------+-----------------+ 
| ID_ANA | DESC_ANA  | 
+--------+-----------------+ 
|  1 | SANGRE BÁSICO | 
|  2 | SANGRE COMPLETO | 
|  3 | ORINA BÁSICO | 
|  4 | ORINA COMPLETO | 
|  5 | HECES BÁSICO | 
|  6 | HECES COMPLETO | 
+--------+-----------------+ 

現在,所有我必須做的是找到奉命最多,顯示其細節的分析。現在我可以找到比其他人訂購更多次數的分析,但加入這兩張表格以便我可以顯示它的描述是我不太擅長的事情。我試過這個,但它只是trows一個錯誤,我不能把它整理出來(的錯誤是:操作數應包含1列(S)):

Select * from TIPOS_ANALISIS 
    -> where ID_ANA = (SELECT ID_ANA, COUNT(ID_ANA) as AnaCount 
    -> from PETICIONES 
    -> group by ID_ANA 
    -> order by AnaCount DESC 
    -> limit 1); 
莫非

別人的幫助和解釋一下?請?

如果我想顯示計數的數量呢?我怎麼做?

+0

見http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-:只要從內部查詢選擇1列我要一個非常簡單的SQL查詢 – Strawberry

+0

所有的好,所有,但它是我的練習數據庫,我想了解一些概念。很明顯,我確實已經閱讀了關於這個和所有的理論,但顯然在處理一些事情方面有一些困難。噢,我很欣賞它,我很容易,不值得花時間去查詢一些,但是因爲我剛剛開始使用SQL,所以它看起來並不那麼容易。隨着時間的推移,我會相信它,但我還沒有完成。我敢於相信像我這樣的人很多。 – CNB

回答

1

試試這個:

Select a.* 
from TIPOS_ANALISIS a 
where a.ID_ANA = (select p.ID_ANA 
        from PETICIONES p 
        group by p.ID_ANA 
        order by AnaCount DESC 
        limit 1 
       ); 

的錯誤是該子查詢是子查詢,這意味着它必須返回一列,最多一行。標量子查詢用於代替SQL中的常量值。

我不是100%確定這將在MySQL中工作。 MySQL在某些子查詢中對limit挑剔。

但是,你可以更該爲from條款:

Select a.*, p.AnaCount 
from TIPOS_ANALISIS a join 
    (select p.ID_ANA, count(*) as AnaCount 
    from PETICIONES p 
    group by p.ID_ANA 
    order by AnaCount DESC 
    limit 1 
    ) p 
    on a.ID_ANA = p.ID_ANA 
+0

AnaCount是什麼? – Christian

+0

謝謝,小調整後第二個工作,我想我得到它爲什麼工作。所以真的appreaciated。將嘗試找出mysel的其餘部分(如果可以的話)。 – CNB

+0

@Christian嘿你可以在選擇p.ID_ANA中看到,將(*)計數爲AnaCount它就像一個變量,但要小心,如果你從表中做了一個t因爲你不能訪問名字表了,它已經改變爲t這個查詢:) –

1

嘗試使用

Select a.* 
from TIPOS_ANALISIS a 
where a.ID_ANA = (select b.ID_ANA 
        from PETICIONES b 
        group by b.ID_ANA 
        order by count(*) DESC 
        limit 1 
       ); 
+0

它實際上完美的作品。 – CNB

0

你應該從子查詢中只選擇ID_ANA

select * from TIPOS_ANALISIS 
where ID_ANA = (SELECT ID_ANA 
       from PETICIONES 
       group by ID_ANA 
       order by COUNT(ID_ANA) 
       limit 1) 
1

它已經告訴你應該只有1列。

Select * from TIPOS_ANALISIS 
where ID_ANA = (SELECT ID_ANA FROM (SELECT ID_ANA, COUNT(ID_ANA) as AnaCount 
from PETICIONES 
group by ID_ANA 
order by AnaCount DESC 
limit 1) t1); 

#Edit: To display counts as well 

SELECT ID_ANA, COUNT(ID_ANA) AS count from TIPOS_ANALISIS 
    WHERE ID_ANA = (SELECT ID_ANA FROM (SELECT ID_ANA, COUNT(ID_ANA) as AnaCount 
from PETICIONES 
    group by ID_ANA 
    order by AnaCount DESC limit 1) t1) 
GROUP BY ID_ANA; 
+0

這很有用,謝謝。 – CNB

+0

不客氣:) –

+0

如果我想顯示計數的數量,我該如何處理它? – CNB