我有一个包含3列的表:年龄,姓名,昵称 我想只得到昵称+年龄中名称+年龄根本不存在的名字(+年龄)。
例如:if table:DETAILS包含2行:
查询将返回:age:2,name:gil
SELECT d1.AGE, d1.NAME
FROM DETAILS d1
WHERE d1.NAME NOT IN (SELECT d2.NICKNAME FROM DETAILS d2 WHERE d2.AGE = d1.AGE)
此查询仅在小数据上运行。 知道如何改进吗?
答案 0 :(得分:1)
SQL查询性能的关键点是使用索引。所以你必须在查询/加入列中有索引,你需要使用它(通过连接)。
E.g。查询:
SELECT DISTINCT D1.AGE, D1.NAME
FROM DETAILS D1 LEFT JOIN DETAILS D2 ON D1.AGE = D2.AGE
WHERE D1.NAME <> D2.NICKNAME
请注意,您必须事先在列AGE,NAME和NICKNAME上创建索引才能从此查询中充分受益。
答案 1 :(得分:0)
您可以通过以下方式轻松获得结果:
SELECT d1.AGE,
CASE WHEN d1.NAME IS NULL
THEN d1.NIKCNAME ELSE d1.NAME END as [NewName]
FROM DETAILS d1
INNER JOIN DETAILS d2
ON d1.AGE = d2.AGE
WHERE d2.NAME <> d1.NICKNAME
答案 2 :(得分:0)
使用左连接/左外连接而不是WHERE ... NOT IN ...
执行SQL的命令