1

在 MySql 数据库中有AM_COURSE

UserId      CourseName   course_desc
  101          java        sometext...
  102          mysql       sometext....
   :

AM_TIMETABLE在那张桌子

UserId        Date_Time
 101        2012-08-08 04:00:00 
 102        2012-08-15 10:00:00
 103        2012-08-18 09:00:00
 104        2012-08-24 05:00:00

我的问题是,我正在传递开始日期和结束日期,CourseName然后我想以我编写查询的方式获取 UserId

select UserId,CourseName,course_desc from AM_COURSE where name='java' and UserId=(SELECT UserId FROM AM_TIMETABLE WHERE `Date_Time` BETWEEN '2012-08-07 00:00:00' AND '2012-08-20 00:00:00')

然后我会得到 101 UserId 值。但我收到错误,因为内部查询给出了两个 id ...... please help

4

5 回答 5

1

重命名每个表中的 ID 可能会有所帮助,可能是 COURSE_ID 和 TIMETABLE_ID。在这种情况下,您还将创建一个包含所有用户信息(例如姓名、电子邮件等)的表。

正确设置表后,主键/外键配对将有助于表之间的连接并将数据输出为可想象的格式。

于 2012-08-06T12:31:40.093 回答
0

你可以join两个表:

SELECT  a.UserID
FROM    AM_COURSE a
            INNER JOIN AM_TIMETABLE b
                ON a.UserID = b.USerID
WHERE   a.CourseName = 'java' AND
        b.Date_Time BETWEEN '2012-08-07 00:00:00' AND '2012-08-20 00:00:00'
于 2012-08-06T12:19:38.203 回答
0
SELECT c.UserId
FROM   AM_COURSE c
  JOIN AM_TIMETABLE t 
    ON c.UserId = t.UserId
WHERE c.name = 'java'
  AND t.Date_Time BETWEEN '2012-08-07 00:00:00' AND '2012-08-20 00:00:00'
于 2012-08-06T12:20:29.237 回答
0

这个怎么样

select c.UserId,CourseName,course_desc from AM_COURSE c where name='java' and c.UserId=(SELECT t.UserId FROM AM_TIMETABLE t WHERE `Date_Time` BETWEEN '2012-08-07 00:00:00' AND '2012-08-20 00:00:00')
于 2012-08-06T12:22:20.230 回答
0

如果您的内部查询返回超过 1 个结果(这对您的场景当然有效),那么您不应该使用IN子句吗?

select UserId
,CourseName
,course_desc 
from AM_COURSE 
where name='java' and UserId in (
    SELECT UserId 
    FROM AM_TIMETABLE 
    WHERE `Date_Time` BETWEEN '2012-08-07 00:00:00' AND '2012-08-20 00:00:00'
)
于 2012-08-06T12:24:10.600 回答