gpt4 book ai didi

mysql - SQL - 在另一个表上查找至少两个不同/单独/不同的值

转载 作者:行者123 更新时间:2023-11-29 08:08:01 26 4
gpt4 key购买 nike

在参加在线数据库类(class)(针对初学者)时,我注意到一个问题,我必须查找涉及...至少两个不同值的查询...例如,

ELMASRI 书中的 COMPANY 数据库指出:查找至少从事两个不同项目的所有员工。解决方案(效果很好)是

SELECT DISTINCT LName FROM Employee e1
JOIN Works_On AS w1 ON (e1.Ssn = w1.Essn)
JOIN Works_On AS w2 ON (e1.Ssn = w2.Essn)
WHERE w1.Pno <> w2.Pno

类似地,对于 STUDENT/COURSE 数据库(我忘记了来源):查找至少修读两门不同类(class)的学生的 Student_ID。而且解决方案看起来也很简单(虽然没有经过测试)

SELECT e1.Student_ID FROM Enroll AS e1, Enroll AS e2
WHERE e1.Student_ID = e2.Student_ID
AND e1.Course_ID <> e2.Course_ID

在我的问题中,我必须查找在至少两个不同类型的分支机构(即不具有相同分支机构类型)中拥有帐户的客户的姓名和客户 ID。从下表(MySql)

CUSTOMER:            BRANCH:             ACCOUNT:
Cust_ID Lname Br_ID Br_Type Acc_Num Br_ID Cust_ID Balance
------- ------ ----- ------- ------- ----- ------- -------
1 Mr.A 10 big 1001 10 1 2000
2 Mr.B 11 small 1002 11 1 2500
3 Mr.C 12 big 1003 13 1 3000
4 Mr.D 13 small 1004 12 2 4000
1005 13 3 4500
1006 10 4 5000
1007 12 4 6000

结果表应如下所示:

Lname  Cust_ID
----- -------
Mr.A 1

只有A先生在类型为“大”的分行和类型为“小”的分行拥有账户

我尝试了以下方法,但没有成功

SELECT DISTINCT c1.Lname, a1.Cust_ID FROM Customer AS c1
JOIN Account a1 ON (c1.Cust_ID=a1.Cust_ID)
JOIN Branch b1 ON (a1.Br_ID=b1.Br_ID)
JOIN Branch b2 ON (a1.Br_ID=b2.Br_ID)
WHERE b1.Br_Type<>b2.Br_Type;

我究竟做错了什么?抱歉这么长的描述,但我想确保这个问题是可以理解的,并且对 < > 部分的一些解释将受到高度赞赏。

最佳答案

您正在尝试从同一个帐户记录中提取 2 个不同的分支记录 - 但这不可能发生。您想要搜索 2 个不同的帐户记录以及不同类型的关联分支机构:

SELECT DISTINCT c1.Lname, a1.Cust_ID FROM Customer AS c1
JOIN Account a1 ON (c1.Cust_ID=a1.Cust_ID)
JOIN Account a2 ON (c1.Cust_ID=a2.Cust_ID)
JOIN Branch b1 ON (a1.Br_ID=b1.Br_ID)
JOIN Branch b2 ON (a2.Br_ID=b2.Br_ID)
WHERE b1.Br_Type<>b2.Br_Type;

SQLFiddle here

给出相同结果的更有效方法是使用 GROUP BY 和 HAVING COUNT(DISTINCT Br_Type) >= 2 - 这就是@GordonLindoff 提出的。

关于mysql - SQL - 在另一个表上查找至少两个不同/单独/不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com