考虑下表

SELECT QUEUENAME,
       PRIORITY
  FROM QUEUES
 WHERE QUEUENAME IN ('Windows','Macintosh')

从上面的查询和表值来看,没有QueueName作为“Macintosh”。因此,每当where子句中没有匹配的值时,就应该选择一个QueueName“Unknown”的值及其值。
请告诉我如何实现此查询?
我要的结果是
| QUEUENAME | PRIORITY |
|-----------|----------|
|   Windows |        1 |
|   Unknown |        3 |

最佳答案

你在找这样的东西吗?

SELECT COALESCE(q.queuename, q2.queuename) queuename,
       COALESCE(q.priority, q2.priority) priority
  FROM
(
  SELECT 'Windows' queuename FROM dual
  UNION ALL
  SELECT 'Macintosh' FROM dual
) s LEFT JOIN queues q
    ON s.queuename = q.queuename JOIN queues q2
    ON q2.queuename = 'Unknown'

输出:
|队列名称|优先级|
|-----------|----------|
|窗户| 1|
|未知| 3|
这里是SQLFiddle演示(Oracle)
这里是SQLFiddle演示(SQL Server)

关于mysql - 用pl/sql中的子查询替换不匹配的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18506109/

10-10 09:05