不久前我来到这个网站试图找到一个查询,最后得到了这个。它的作用以及我需要它做的是查看表'数据'并返回任何已经在两个不同diagnosis_locations
处理的客户的名字,姓氏和出生日期。它有效。
SELECT firstname, lastname, date_of_birth
FROM `data`
WHERE diagnosis_location IN (SELECT DISTINCT Diagnosis_location
FROM `data`)
GROUP BY firstname, lastname, date_of_birth
HAVING COUNT(DISTINCT diagnosis_location) >= 2
但是,现在我需要使用相同的查询并获得相同的结果而不使用任何子查询。谁能在这帮助我?或者至少给我一些指示?
答案 0 :(得分:2)
从我看到的查询中返回diagnosis_location
字段不等于null的记录,因此您可以将其重写为
WHERE diagnosis_location IS NOT NULL
答案 1 :(得分:0)
你拥有它的方式很好。唯一的另一种方法是使用临时表。除非你的桌子很大,否则增加的复杂性是不值得的
编辑:我假设您有两列,Diagnosis_location和diagnosis_location。如果这不是真的而你刚刚写了一个错字,那么这个答案是错误的。
答案 2 :(得分:0)
如果您希望在没有子查询的情况下进行编写,请尝试使用连接语句:
SELECT firstname, lastname, date_of_birth
FROM `data` A
JOIN `data` B
ON A.diagnosis_location = B.Diagnosis_location
GROUP BY firstname, lastname, date_of_birth
HAVING COUNT(DISTINCT diagnosis_location) >= 2
出于好奇,如果你想要提高性能并且连接不能正常工作,你应该能够尝试EXISTS语句而不是IN语句:
SELECT firstname, lastname, date_of_birth
FROM `data` A
WHERE EXISTS
(SELECT 1
FROM `data` B
where B.Diagnosis_location = A.diagnosis_location)
GROUP BY firstname, lastname, date_of_birth
HAVING COUNT(DISTINCT diagnosis_location) >= 2