首页 > 解决方案 > 带有内部连接条件的 SQL 查询

问题描述

在此处输入图像描述

上下文是这样的:机器位于某个位置或位于某个位置内的某个位置。我们这里有 2 种情况,机器可以在 positionId 中有一个值,或者如果该位置只有一台机器,它在 positionId 中有 0 作为值。我写了一个查询来返回序列号、名称、地址、描述和标识符的值,同时考虑到存在或不存在位置的情况:

SELECT machine.`serialNumber`, location.`name`, location.`address`, product.`identifier`,
(CASE WHEN EXISTS(SELECT `description`
                 FROM `positions` AS pos
                 WHERE pos.`locationId` = `machine`.`id`) 
    THEN `description`
    ELSE 0
END) AS existPos    
FROM machine 
INNER JOIN location 
ON machine.`locationId` = location.`id` 
INNER JOIN positions
INNER JOIN product
ON machine.`id` = product.`machineId`  
WHERE machine.`id` = 5

结果是多行相同的数据。我在哪里做错了?

标签: sqlphpmyadmin

解决方案


您可以尝试以下方法:

SELECT 
  machine.`serialNumber`, 
  location.`name`, 
  location.`address`, 
  product.`identifier`,
  (CASE WHEN positions.Id is not null 
    THEN `description`
    ELSE 0
  END) AS existPos    
FROM 
  machine 
INNER JOIN 
  location 
  ON machine.`locationId` = location.`id` 
LEFT JOIN 
  positions
  on positions.`Id` = machine.`positionId`
INNER JOIN 
  product
  ON machine.`id` = product.`machineId`  
WHERE machine.`id` = 5

推荐阅读