用于检查student1是否有学生2课程的SQL查询

时间:2010-12-13 23:41:32

标签: sql

我有一张桌子,我需要检查我有ID的两个用户(例如20和21)是否共享相同的课程,只是真或假。

Table: jos_gj_users
Columns: id_user, id_group

Data Example: (20; 4)
              (20; 5)
              (20; 6)
              (21; 6)
              (21; 7)

上面的数据显示用户20和用户21共享课程6但是如何通过输入ID而不使用PHP循环结果来获取SQL?

6 个答案:

答案 0 :(得分:3)

尝试自我加入:

SELECT T1.id_group
FROM jos_gj_users T1
JOIN jos_gj_users T2
ON T1.id_group = T2.id_group
WHERE T1.id_user = 20
AND T2.id_user = 21

要获得“真或假”结果,您可以从客户端检查结果集中是否存在至少一行,而不是获取整个结果。

或者,您可以通过将上述查询包装在另一个使用EXISTS的SELECT中来在SQL中执行此操作:

SELECT CASE WHEN EXISTS
(
    SELECT T1.id_group
    FROM jos_gj_users T1
    JOIN jos_gj_users T2
    ON T1.id_group = T2.id_group
    WHERE T1.id_user = 20
    AND T2.id_user = 21
) THEN 1 ELSE 0 END AS result

此查询返回0(false)或1(true)。

答案 1 :(得分:0)

这个想法是你必须把桌子加到自己身上。在上半部分中,您查找用户1,在下半部分中查找用户2.当然,只有那两半中具有相同id_group的行才相关:

SELECT count(*)
FROM jos_gj_users As j1, jos_gj_users As j2
WHERE j1.id_user = 20 AND j2.id_user = 21
AND j1.id_group = j2.id_group

这将始终返回一行,其中包含一列:共享课程的数量。如果是0,则不分享任何课程。

答案 2 :(得分:0)

您可以使用子选择来执行此操作:

select id_group
from  jos_gj_users
where (id_user = 20)
and id_group in (select id_group from jos_gj_users where id_user = 21)

答案 3 :(得分:0)

SELECT COUNT(*) > 0 FROM jos_gj_users WHERE id_user=54321 AND id_group IN ( SELECT id_group FROM jos_gj_users WHERE id_user = 1345 )

答案 4 :(得分:0)

这是显示来自相同组的用户的查询。

SELECT
  *
FROM
  jos_gj_users T1
  INNER JOIN jos_gj_users T2 ON T1.id_group = T2.id_group

答案 5 :(得分:0)

尝试一下 - 它接受第一个粗体区域中的输入参数,并根据第二个粗体区域中的值通过CASE语句返回值TRUE或FALSE。

  

选择DISTINCT案例时   (SELECT DISTINCT COUNT(id_group)FROM jos_gj_users WHERE id_user IN (20,21)
GROUP BY id_group
  有COUNT(DISTINCT id_user)= 2)IS NOT NULL,然后'TRUE'
  ELSE 'FALSE'
  END
  来自jos_gj_users