SQL选择具有默认值的层次结构

时间:2010-09-10 11:40:17

标签: sql mysql select

我有一个表格格式如下:

+---+---+--------+
| u | i | value  |   
+---+---+--------+
| 0 | 1 | Value1 |
| 0 | 2 | Value2 |
| 0 | 3 | Value3 |
| 8 | 2 | Value4 |
| 9 | 2 | Value5 |
| 9 | 3 | Value6 |
+---+---+--------+

我的目标是做一个选择,为每个id(i)选择该用户(u)的值(如果存在),如果不存在,则返回到与0相关的值。例如:

用户ID 7(仅默认值)

Value1
Value2
Value3

用户ID 8(2个默认值,1个唯一)

Value1
Value4
Value3

用户ID 9(1个默认值,2个唯一)

Value1
Value5
Value6

这在单个mySQL查询中是否可行?

1 个答案:

答案 0 :(得分:3)

SELECT COALESCE( usr.value, def.value ) AS value
FROM your_table def
LEFT JOIN your_table usr ON ( usr.i = def.i AND usr.u = your_user )
WHERE def.u = 0

这将选择u=0和左边加入所请求用户记录的所有记录。

如果存在,请从那里获取值,否则采用默认值(使用COALESCE)。

请注意,这只会返回存在默认值(u=0)的记录。