我有两个相关的表格:
实习生和设备
每位受训者都需要对设备进行培训,以便获准使用。由于受训者需要在多个设备上接受培训,并且多个用户可以使用一个设备,因此我在这两个设备之间创建了多对多关系。
因此,MySQLWorkbench创建了另一个名为' trainee_has_device'并且持有一个外键给实习生.Id和设备的外键.Id。到目前为止,非常好。
我需要将受训者的培训状态提供给特定设备,因此我在' trainee_has_device'上添加了一个属性TrainingStatus。我的表格看起来像这样:
|trainee|
---------------------
id
surname
|device|
---------------------
id
deviceName
|trainee_has_device|
---------------------
traineeId
deviceId
TrainingStatus
即使在“trainee_has_device”中没有条目,我也需要将每个人的培训价值都提供给每个设备。 (如果是这样,我想得到null)
我的查询如下:
SELECT * FROM trainee LEFT OUTER JOIN trainee_has_device ON trainee_has_device.traineeId = trainee.id LEFT OUTER JOIN device ON device.id = trainee_has_device.deviceId
但不幸的是,我只获得了在trainee_has_device中列出的条目或null。
即使在#trainee_has_device'中没有条目,我怎样才能将每个人的TrainingStatus送到每个设备?
答案 0 :(得分:1)
即使“trainee_has_device”中没有条目,我也需要将每个人的培训价值都提供给每个设备
这没有意义,必须首先填写trainee_has_device表,否则它不会显示任何数据。在现实世界中,必须为所有受训者分配一组具有默认状态(新的,熟悉的......)的设备。因此,如果实习生A和设备C之间的连接不可用,则仅表示设备C未分配给实习生A
答案 1 :(得分:1)
我设法使用子查询:
SELECT trainee.id as TraineeId, trainee.Prename, trainee.Surname, trainee.Mail, trainee.Department,
trainee.Telephone, device.Name as DeviceName, (SELECT IF (trainee_has_device.trainee_id = trainee.id AND
trainee_has_device.device_id = device.id, trainee_has_device.TrainingStatus, 'N/A')
FROM trainee_has_device WHERE trainee_has_device.trainee_id = trainee.id AND device.id = trainee_has_device.device_id) AS TrainingStatus
FROM trainee JOIN device ORDER BY trainee.Surname, trainee.id, device.Name ASC