2017-05-29 20 views
-2

我有两个表MySQL查询问题(如何消除具有old_device_id列空值的记录)

device(id, name) 
device_map(email, old_device_id) 

device_mapusersold devices列表。有些用户可能没有旧设备。

old_device_idunique并且参考来自设备表的id。但它也可以是null

现在我想要在表连接上进行选择查询。

select device.email, device.old_device_id, device.name 
from join of device.id and device_map.old_device_id sort by device.name 

device_map具有old_device_id空一些行未被选中。

SELECT dmap.email, dmap.old_device_id, d.name 
FROM device_map dmap 
JOIN device d ON d.id = dmap.old_device_id ORDER BY d.name 
+2

你能提供你的SQL吗?看起来你没有使用LEFT JOIN – FieryCat

+2

也可以提供一些样本结果吗?就像你有什么数据和你期望的一样? – Arion

回答

1

下面是该查询:表

SELECT dm.email, dm.old_device_id, d.name 
FROM device_map dm 
LEFT JOIN device d ON d.id = dm.old_device_id ORDER BY d.name 

INNER JOINdevice之间device_map将自动删除记录与old_device_idnull值。

LEFT JOIN也将包括空记录。

+0

我已经尝试过相同的查询。我也想包括所有空记录。 – Durgaprasad

+0

@Durgaprasad:我改变了查询。如果你想包含空记录,那么你应该使用'left join'而不是'inner join' –