mysql - SQL 从另一行中减去查询行

标签 mysql sql

我用下面的代码提取信息,效果非常好。

我需要在不影响contractorID的情况下提取数据,然后从中减去第一个查询中的行。

   SELECT 
 DISTINCT a.addID
        , p.propdetailID
        , p.plotID
     FROM address                AS a
LEFT JOIN propdetail             AS p   ON (a.addID = p.addID)
     JOIN housebuildertoproperty AS htp ON (htp.addID = p.addID)
     JOIN contractortopropdetail AS ctp ON (ctp.propdetailID = p.propdetailID)
    WHERE htp.housebuilderID = 1
      AND ctp.contractorID   = 1

所以我的意思是:

  1. 第 1 行

这是第一个查询的结果

  1. 第 1 行
  2. 第 2 行
  3. 第 3 行

这是没有 AND ctp.contractorID = 1 部分的查询结果。我需要可以提取的代码:

  1. 第 2 行
  2. 第 3 行

我尝试了 MINUS 但 phpMyAdmin 不接受它。我已经研究过 NOT IN 但我似乎无法弄清楚这一点。

最佳答案

首先,左联接是不必要的,因为后续联接条件和where子句将其变成内联接

您的问题是,contractorID = 1 上的某些地址有其他承包商。解决方案是使用 group by 而不是 distinct 并使用 having 子句来过滤承包商 1 的地址:

  SELECT a.addID, p.propdetailID, p.plotID
  FROM address a JOIN 
       propdetail p 
       ON (a.addID = p.addID) JOIN
       housebuildertoproperty htp
       ON (htp.addID = p.addID) JOIN
       contractortopropdetail ctp
       ON (ctp.propdetailID = p.propdetailID)
    WHERE htp.housebuilderID = 1
  GROUP BY a.addID, p.propdetailID, p.plotID
  HAVING SUM(ctp.contractorID = 1) = 0

关于mysql - SQL 从另一行中减去查询行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22761656/

相关文章:

Mysql: `natural join`如何使用 `join_condition`?

mysql - 按计数按最小长度分组

mysql - 从 wp_usermeta 表更新 'meta_value' 分配同一个表的另一个 'meta_value' 的值

sql - 非常复杂的数据库架构,如何处理呢?

php - 从复选框中获取选中的值,即从数据库中获取数据

sql - 如何使用 postgres 中的窗口函数选择特定更改

sql - 当您希望 NULL = NULL 为真时,在 SQL 中该怎么做?

php - 显示 MySQL 数据库中存储为 BLOB 数据的所有图像

mysql - 将旧版 v1 数据迁移到 Rails 6 应用程序中的 v2 数据库

mysql - T SQL CASE WHEN EXISTS 更新语句