【问题标题】:Join tables on missing matched rows from the second table在第二个表中缺少匹配的行上连接表
【发布时间】:2013-11-22 09:28:12
【问题描述】:

我有两个数据库表 - table1 和 table2。对于表 1 中的某些记录,我在表 2 中连接了几行。对于他们中的大多数人,我连接了 3 行,但对于其中一些人,我有一个额外的行,其列值类似于 table2.field='correct'。如果我希望结果只返回 table1 中的行,而 table2 中没有行,并且 table2.field='correct' 连接到它们,我该如何加入 table1 和 table2?计算第二个表中的行数(如果连接的行数

我试过类似的东西:

SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 on t1.id=t2.id_t1 WHERE t2.field IS NULL 

但它不起作用。因为我总是在字段列中有具有值的行。对于 t1 中连接到 t2 的每一行,我在 t2 中有记录行,其中 t2.filed='name' 和 t2.field='type'。我需要来自 t1 的行,这些行在 t2 中没有连接到它们的行,其中 t2.field='correct'。

【问题讨论】:

    标签: php mysql join


    【解决方案1】:

    使用 NOT IN

    SELECT * from t1 WHERE t1.id NOT IN(SELECT id FROM t2 WHERE t2.field = 'correct')
    

    【讨论】:

    • 这没有帮助。我不需要匹配的行。
    【解决方案2】:
    $sql = "SELECT t1.* FROM table1 t1 CROSS JOIN table2 t2 on t1.id=t2.id_t1 WHERE t2.field IS NULL  ";
    

    【讨论】:

    • 问题是 t2.field 永远不会为空,它总是有 2 或 3 行有值。像 t2.field='name' 和 t2.field='type'。我需要来自 t1 的行,这些行在 t2.field='correct' 的表 2 中没有记录连接到它们的行。
    【解决方案3】:

    SELECT t1.* FROM table1 t1 WHERE NOT EXISTS(SELECT t2.* FROM table2 t2 WHERE t1.id=t2.id_t1 AND t2.field = '正确')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多