mysql - 如何根据一列将此 SQL 查询更改为 "SELECT DISTINCT"?

标签 mysql sql select distinct

所以我知道使用 SQL 不能基于一列执行 DISTINCT,但查看其他答案似乎可以使用子查询来执行此操作。谁能帮我用我的 SQL 查询来做到这一点?我尝试了很多不同的方法,但似乎不知道如何让它发挥作用。

我正在尝试根据 emplid 列 SELECT DISTINCT。例如,如果有 2 行具有相同的 emplid,我只想要其中一行。

SELECT DISTINCT t.TenantID, rt.term, t.emplid, t.staff, loc.locationName, tt.comment, l.lengthName
FROM TenantTerm tt
INNER JOIN Tenant t ON t.TenantID = tt.TenantID
INNER JOIN RentTerm rt ON rt.TenantID = t.TenantID
INNER JOIN length l ON l.lengthID = tt.lengthID
INNER JOIN location loc ON loc.locationID = tt.locationID
WHERE tt.assigned='0' AND rt.term>='$currentTerm' ORDER BY t.TenantID"

以及一些示例输出数据:

["TenantID"] => string(3) "535" 
["term"]=> string(4) "2137" 
["emplid"]=> string(7) "1855280" 
["staff"]=> string(1) "0" 
["locationName"]=> string(12) "BuildingOne" 
["comment"]=> string(0) "" 
["lengthName"]=> string(13) "Academic Year"  

注意:经过编辑以提高清晰度并包含示例数据。

最佳答案

您所要求的实际上没有意义,DISTINCT适用于SELECT中的所有列..所以如果您只想要唯一的emplid 返回的值,您对其他列有何期望?

如果这些已经一致,你就不会问这个问题,如果你不关心它们,为什么要退回它们?

简单的答案是:

  SELECT DISTINCT t.emplid
    FROM TenantTerm tt
    JOIN Tenant t 
      ON t.TenantID = tt.TenantID
    JOIN RentTerm rt 
      ON rt.TenantID = t.TenantID
    JOIN length l 
      ON l.lengthID = tt.lengthID
    JOIN location loc 
      ON loc.locationID = tt.locationID
   WHERE tt.assigned='0' 
     AND rt.term>='$currentTerm'
ORDER BY t.TenantID

关于mysql - 如何根据一列将此 SQL 查询更改为 "SELECT DISTINCT"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25244919/

相关文章:

mysql - 如何修复转义表名时的语法错误?

java - 易受 SQL 注入(inject)攻击?

mysql - SQL 查询错误 - 从带条件的表中选择

mysql - 当一列有前缀时连接表

mysql - mysql存储过程中的查询错误地返回null

mysql - 无法在 Enterprise Architect 中获取表信息 - MySQL

c# - SQL 正在四舍五入我的小数点

sql - 如何使用 HeidiSQL 在 Firebird 中设置超时?

php - mysql在多个表中插入数据:

jQuery 模拟选择选项上的点击事件