2011-07-02 64 views
0

我試圖此查詢疑問,在查詢 - MySQL的

SELECT round(avg(DATEDIFF(CURRENT_DATE, age) /365) , 1) 
FROM single_user U 
INNER JOIN university_has_single_user T 
ON T.single_user_users_id_user = U.users_id_user 
where (
SELECT id_university 
FROM university 
WHERE university = "ISEL" 
) 
LIMIT 0 , 30 

輸出爲26.8,但有一些問題,因爲如果我改變了大學的名稱,或者乾脆刪除where子句的結果是26.8再次。

日期是:

1979-06-23 
1988-04-23 
1988-04-23. 

任何幫助嗎?問題是什麼?

回答

1
where (
SELECT id_university 
FROM university 
WHERE university = "ISEL" 
) 

應該

where 
    exists (
    SELECT id_university 
    FROM university x 
    WHERE x.university = "ISEL" AND 
    x.universityid = t.universityid 
) 

嗯,我猜。我不清楚你的表格結構是什麼,以及你想要達到的目標,但在我看來,你想爲特定的大學獲得這個數字,並將其名稱傳遞給查詢。

如果我錯了,請張貼您的表格結構和實際目標。

1

您的WHERE子句不過濾。這是邏輯等效的WHERE 1=1

其中一個表有一個FK回到表大學,是嗎?

我懷疑你正在尋找這樣的:

SELECT round(avg(DATEDIFF(CURRENT_DATE, age) /365) , 1) 
FROM single_user U 
INNER JOIN university_has_single_user T 
ON T.single_user_users_id_user = U.users_id_user 

INNER JOIN university AS UNI ON UNI.id = 
    U.university_id -- or wherever your university ID FK is. 
where UNI. university = "ISEL" 
LIMIT 0 , 30 

答案將取決於你的表的模式有所不同。

+0

也有效,謝謝 –