簡體   English   中英

在MySQL中找到缺失的值

[英]find missing values in MySQL

我正在嘗試編寫查詢以找出哪些用戶未注冊某些課程。

我有2張桌子; 課程和用戶。 兩者都包含字段“ id”,然后分別包含“ coursename”和“ username”。

現有系統使用這兩個表將用戶添加到第三個表(稱為enrolled_users)。 用戶每人占用一行。 例如,如果用戶ID'1'在4門課程中,則enrolled_users如下所示:

-----------------------
| user_id | course_id |
-----------------------
|     1   |     1     |
|     1   |     2     |
|     1   |     3     |
|     1   |     4     |
-----------------------

如您所見,該表數據不是基於關系構建的,它是使用兩個表“ courses”和“ users”在PHP中生成的。

我不確定如何寫查詢來確定未注冊用戶“ 1”的課程(如果有10門課程),但是我們可以看到用戶“ 1”僅在課程1-4上。

我是否想使用類似或不喜歡的東西?

SELECT u.id, c.id, ec.user_id, ec.course_id
FROM users u, courses c, enrolled_courses ec
WHERE u.id = ec.user_id
AND c.id = ec.course_id
AND u.id = '1'

我嘗試使用!=和<>,但這沒有顯示出我的需要; 用戶未注冊的課程列表。

抱歉,如果我含糊不清,請嘗試繞開它!

使用MySQL 5.0,在現有系統上,我無法修改,僅可以查詢(目前)。

SELECT
    *
FROM
    courses c
WHERE
    c.id NOT IN (
    SELECT
        ec.course_id
    FROM
        enrolled_courses ec
    WHERE
        ec.user_id = 1 AND ec.course_id IS NOT NULL
    )

只需使用一個不在和一個子選擇。

select * from courses c where c.id not in 
   (select  course_id  from enrolled_courses  where  user_id='1') 

如果您要查找特定的單個用戶ID,請確保將該ID條件包括在WHERE子句中,否則,請將其保留為空白,這將為您提供所有未通過笛卡爾積注冊所有可能類的人員(因為用戶和課程表之間沒有直接連接)..如果試圖為每個人運行,這可能非常大/耗時,並且您的課程表是100課的課程,而某人只參與2-3-4課程。

select 
      u.id,
      c.id CourseID
   from 
      users u,
      courses c
   where
          u.id = 1
      AND c.id NOT IN 
           ( select ec.Course_ID
                from enrolled_courses ec
                where ec.user_id = u.id )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM