我有一个名为items如下的表:
id oId key value
1 0 color green
2 0 size 30
3 1 color red
4 2 color blue
Run Code Online (Sandbox Code Playgroud)
上面的行oId=0指定了项的默认值.
我需要选择所有的key,value与特定的项目oId,其中将包括(OID = 0),如果特定的默认key,并value为oId不存在.
例如.对于第2项,它应该返回
id oId key value
1 0 size 30
2 2 color blue
Run Code Online (Sandbox Code Playgroud)
我写了以下查询:
SELECT * FROM items AS i
WHERE i.oId=0 AND
i.key NOT IN (SELECT key FROM items WHERE oId=2)
UNION ALL
SELECT * FROM items WHERE oId=2
Run Code Online (Sandbox Code Playgroud)
有没有办法优化上面的查询?
小智 1
您可以在右侧索引上使用 JOIN:
SELECT t1.`key`, IFNULL(t2.value, t1.value)
FROM `items` AS t1
LEFT JOIN `items` AS t2
ON t1.`key` = t2.`key` AND t2.`oId` = 2
WHERE t1.`oId` = 0;
Run Code Online (Sandbox Code Playgroud)