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 値を取得します。しかし、内部クエリが2つのIDを与えるため、エラーが発生しています... please help

4

5 に答える 5

1

COURSE_ID や TIMETABLE_ID など、各テーブルの ID の名前を変更すると役立つ場合があります。この場合、名前、電子メールなどのすべてのユーザー情報を含むテーブルも作成します。

テーブルを正しく設定したら、主キーと外部キーのペアリングは、テーブル間の接続と考えられる形式へのデータの出力に役立ちます。

于 2012-08-06T12:31:40.093 に答える
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

内部クエリが複数の結果を返す場合 (もちろん、これはシナリオで有効です)、 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 に答える
0

join次の 2 つのテーブルを使用できます。

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 に答える