怀疑在查询 - mysql

时间:2011-07-02 23:12:55

标签: 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.

任何帮助?有什么问题?

2 个答案:

答案 0 :(得分: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 :(得分: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

答案将根据您的表格式而有所不同。