我有两张桌子:
CREATE TABLE `events` (
`id` double NOT NULL,`value` int, PRIMARY KEY (`id`));
CREATE TABLE `updates` (
`id` double NOT NULL AUTO_INCREMENT,
`action` enum('delete','update') DEFAULT NULL,
`event_id` double DEFAULT NULL,
PRIMARY KEY (`id`));
并尝试进行查询,该查询将从更新中获取所有值events
并从更新中获取值,即使event_id
事件表中不存在更新(仅当操作为“删除”时才可能)
使用
SELECT ifnull(e.id,u.event_id) AS event_id,
e.value,ifnull(u.action,'update') AS ACTION,
ifnull(u.id,-1) as update_id
FROM events e
LEFT JOIN updates u ON e.id=u.event_id
我得到
| EVENT_ID | VALUE | ACTION | UPDATE_ID |
----------------------------------------------
| 1361264148710 | 1 | update | -1 |
| 1361264148711 | 2 | update | -1 |
| 1361264148712 | 5 | update | -1 |
| 1361264148713 | 10 | update | 1 |
| 1361264148714 | 11 | update | 2 |
| 1361264148714 | 11 | update | 3 |
| 1361264148714 | 11 | update | 4 |
| 1361264148715 | 14 | update | 5 |
| 1361264148716 | 1 | update | 6 |
| 1361264148717 | 17 | update | 8 |
| 1361264148718 | 22 | update | 10 |
| 1361264148719 | 23 | update | 11 |
我的目标是获得:
| EVENT_ID | VALUE | ACTION | UPDATE_ID |
-----------------------------------------------
| 1361264148710 | 1 | update | -1 |
| 1361264148711 | 2 | update | -1 |
| 1361264148712 | 5 | update | -1 |
| 1361264148713 | 10 | update | 1 |
| 1361264148714 | 11 | update | 2 |
| 1361264148714 | 11 | update | 3 |
| 1361264148714 | 11 | update | 4 |
| 1361264148715 | 14 | update | 5 |
| 1361264148716 | 1 | update | 6 |
| 1361264148708 | (null) | delete | 7 |
| 1361264148717 | 17 | update | 8 |
| 1361264148709 | (null) | delete | 9 |
| 1361264148718 | 22 | update | 10 |
| 1361264148719 | 23 | update | 11 |