mysql - 比较 MySQL 中单元格的值

标签 mysql

我有一个数据库:

Student (ID, Name, Grade)
Likes (ID1, ID2)

Where ID1 and ID2 in last table are foreign key referenced student(ID)

注意:喜欢不是相互关系,例如,如果 (123, 456) 在 Likes 表中,则 (456,123) 也不一定在 Likes 表中。

我必须为以下语句编写查询: “对于彼此喜欢的每一对学生,返回两个学生的姓名和成绩。每对只包含一次,两个名字按字母顺序排列。”

至此我给出了ID1和ID2相互喜欢的数据:

SELECT s1.ID, s1.name, s2.ID, s2.name 
FROM student s1, student s2, likes l
WHERE s1.ID = l.ID1 AND s2.ID = l.ID2 
AND l.ID1 IN (SELECT ID2 FROM likes) 
AND l.ID2 IN (SELECT ID1 FROM likes);

请有人帮助我如何避免重复对。

数据库是:(如果有人需要的话)

INSERT INTO `student` VALUES (1025,'John',12),(1101,'Haley',10),(1247,'Alexis',11),(1304,'Jordan',12),(1316,'Austin',11),(1381,'Tiffany',9),(1468,'Kris',10),(1501,'Jessica',11),(1510,'Jordan',9),(1641,'Brittany',10),(1661,'Logan',12),(1689,'Gabriel',9),(1709,'Cassandra',9),(1782,'Andrew',10),(1911,'Gabriel',11),(1934,'Kyle',12);
INSERT INTO `likes` VALUES (1689,1709),(1709,1689),(1782,1709),(1911,1247),(1247,1468),(1641,1468),(1316,1304),(1501,1934),(1934,1501),(1025,1101);

并根据输入的数据:

我得到的数据

1689    Gabriel     1709    Cassandra
1709    Cassandra   1689    Gabriel
1501    Jessica     1934    Kyle
1934    Kyle        1501    Jessica

理想数据

1689    Gabriel     1709    Cassandra
1501    Jessica     1934    Kyle

最佳答案

因为问题是“如何避免重复对。”:

您连接 2 个表以获得它们彼此喜欢的表,每对将获得 2 行。

您可以通过与某个不同的值进行比较来丢弃一个。 ID 是一个很好的候选人:

select * -- put fields here
from likes li 
join likes li2 on li2.ID1 = li.ID2 and li2.ID2 = li.ID1
-- join 2 students here
where li.ID1 < li.ID2

关于mysql - 比较 MySQL 中单元格的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13989294/

相关文章:

php - 查询未执行。没有错误

javascript - json_encode 在我的外部 javascript 中没有显示任何内容

mySQL fatal error - 无法弄清楚

Mysql日志表架构

php - 按日期排序(最新)

mysql - Ansible:删除多个数据库 MySQL 时出错

mysqlimport:错误:1045,访问被拒绝

查询中的MySql IF语句

php - 为 session 设置 MySQL 时区

mysql - 跨服务器,标准 SQL 生成逗号分隔列表