如何使用 SQL Server 查找在同一专业工作但居住在不同城市的医生

How do I find doctors who work in the same specialty but live in different cities using SQL Server

提问人:Payamah 提问时间:8/9/2023 最后编辑:philipxyPayamah 更新时间:8/30/2023 访问量:56

问:

目标是选择所有在同一专业工作但来自不同城市的医生。我尝试了下面的两个代码选项,但它们没有产生预期的结果。

医生表的图像

select * from doctors s
    join doctors c
    on s.specialty = c.specialty 
    and c.doctor_id <> s.doctor_id
where s.city <> c.city
SELECT DISTINCT d1.first_name, 
    d1.specialty,
    d1.city AS city1,
    d2.city AS city2
FROM doctors d1`your text`
JOIN doctors d2 ON d1.specialty = d2.specialty 
AND d1.doctor_id <> d2.doctor_id
WHERE d1.city <> d2.city;`your text`
sql-server sql-server-2008 内部联接

评论

2赞 Thom A 8/9/2023
提问时,请不要上传代码/数据/错误的图片。
2赞 Thom A 8/9/2023
真的还在使用 SQL Server 2008 吗?它在 4 年前完全失去了支持。
0赞 Sean Lange 8/9/2023
看起来一些规范化会在这里帮助你。至少我会把专科和医院切成自己的桌子。
0赞 Sean Lange 8/9/2023
对于手头的问题,您的代码不起作用的是什么?不知道为什么你的一些逻辑在连接谓词中,而其他逻辑在where子句中。但是,对于示例数据,您的代码应该返回您声明的内容。

答:

1赞 myrn 8/9/2023 #1

试试这个查询;

SELECT DISTINCT d1.first_name, 
    d1.specialty,
    d1.city AS city1,
    d2.city AS city2
FROM doctors d1
JOIN doctors d2 ON d1.doctor_id <> d2.doctor_id  
WHERE d1.city <> d2.city and d1.specialty = d2.specialty

此外,您的联接条件应该只是 id 的不等式。而你的条件应该是城市和专业。

0赞 nvogel 8/29/2023 #2

你的问题有点不清楚。你的意思是你希望所有医生都符合这种情况,例如:

SELECT *
FROM doctors AS d
WHERE city != ANY
    (SELECT city
    FROM doctors AS e
    WHERE d.specialty = e.specialty);

或者你真的希望所有医生都满足这样的条件:

SELECT d.doctor_id, d.first_name, d.last_name, d.city,
       e.doctor_id, e.first_name, e.last_name, e.city
FROM doctors AS d, doctors AS e
WHERE d.specialty = e.specialty
AND d.city != e.city;

我假设doctor_id在您的表格中是独一无二的,因此每个医生只属于一个城市。如果这是不正确的,那么请告诉我们您的表的键是什么。更好的是,发布 CREATE TABLE 语句。希望其中一个查询接近您的需求。