我有一个名为 items
的表,如下所示:
id oId key value
1 0 color green
2 0 size 30
3 1 color red
4 2 color blue
上面 oId=0
的行指定了项目的默认值。
我需要选择具有特定 oId
的项目的所有 key
、value
,如果特定的话,它将包括默认值 (oId=0) oId
的 key
和 value
不存在。
例如。对于第 2 项,它应该返回
id oId key value
1 0 size 30
2 2 color blue
我写了以下查询:
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
有没有办法优化上面的查询?
最佳答案
您可以在正确的索引上使用 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;
关于php - 条件偏好 sql 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26063520/