dongzichan2886 2016-10-25 19:23
浏览 36
已采纳

如何编写MySql select语句以获取所有已定义的设置或默认设置,而不会在一个语句中覆盖id

In a table myTable defined as:

+----+---------+-----------+
| id |  name   |   value   |
|----+---------+-----------+
| 7  | hand    |  right    |
| 5  | hand    |  left     |
| 0  | hand    |  both     |
| 0  | feet    |  both     |
| 0  | eyes    |  green    |
| 9  | eyes    |  blue     |
| 2  | eyes    |  white    |
| 2  | hand    |  raised   |
+----+---------+-----------+

Default settings are controlled by id = 0.

My question is how to write a select statement to get name,value for id = 5 in one query that will include set for id = 5 and any defaults not overridden.

The results should be:

+---------+-----------+
|  name   |   value   |
+---------+-----------+
| hand    |  left     |
| feet    |  both     |
| eyes    |  green    |
+---------+-----------+  
  • 写回答

4条回答 默认 最新

  • doudu161481 2016-10-25 20:55
    关注

    It isn't clarified if the ordering of the result set is important, so might as well try:

    SELECT name,
        value
    FROM MyTable
    WHERE id = 5
        AND id NOT IN
        (
            SELECT id
            FROM MyTable
            WHERE id = 0
            GROUP BY MyTable.id
        )
    UNION
    SELECT name,
        value
    FROM MyTable
    WHERE id = 0
        AND name NOT IN
        (
            SELECT name
            FROM MyTable
            WHERE id = 5
            GROUP BY MyTable.name
        )
    

    Disclaimer: Tested in SQL Server, but not using anything specific to that version of SQL.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集