我有一个表包含3列:年龄、名称、昵称,我只想得到name+age在nickname+age中根本不存在的名称(+ age )。
例如: if表: 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)此查询仅在小数据上运行。知道怎么改进吗?
发布于 2017-03-07 09:23:33
SQL查询性能的关键点是使用索引。因此,您必须在查询/连接列中使用索引,并且需要使用它(通过联接)。
例如,查询:
SELECT DISTINCT D1.AGE, D1.NAME
FROM DETAILS D1 LEFT JOIN DETAILS D2 ON D1.AGE = D2.AGE
WHERE D1.NAME <> D2.NICKNAME请注意,您必须事先对列年龄、名称和昵称创建索引,才能充分受益于此查询。
发布于 2017-03-07 09:05:47
您可以很容易地得到以下结果:
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发布于 2017-03-07 09:09:32
使用左联接/左外联接代替.不是在..。
SQL的执行顺序
https://stackoverflow.com/questions/42644031
复制相似问题