【问题标题】:Select MySQL with double restrict选择具有双重限制的 MySQL
【发布时间】:2013-04-12 12:33:51
【问题描述】:

我有两个表,我想在第一个表中只选择第二个表中没有的报告,它们的 id_user='N',全部按外键 id(table1.id,filter_table1.id_table1)。

SELECT * 
FROM table1, filter_table1 
WHERE table1.id!=(SELECT id_table1 FROM filter_table1 WHERE id_user='1') 

【问题讨论】:

  • 上述查询有什么问题?
  • 您必须在两个表上提供连接条件。如果没有您的表架构或更多信息,我们真的无能为力。此外,只需为自己省点麻烦并使用显式连接。

标签: mysql sql select join


【解决方案1】:

我宁愿使用LEFT JOIN 而不是NOT IN

SELECT  a.*
FROM    table1 a
        LEFT JOIN filter_table1 b
            ON  a.ID = b.id_table1 AND
                b.id_user = 1
WHERE   b.id_table1 IS NULL

【讨论】:

    【解决方案2】:
    SELECT * 
    FROM table1
    WHERE table1.id NOT IN (SELECT id_table1 FROM filter_table1 WHERE id_user='1') 
    

    【讨论】:

      【解决方案3】:

      您不需要在上述查询中加入 - 只需使用所谓的 correlated subquery

      SELECT t1.* 
      FROM table1 t1
      WHERE t1.id NOT IN (
        SELECT id_table1 
        FROM filter_table1 
        WHERE id_user = '1' AND t1.id = filter_table1.id_table1
      ) 
      

      【讨论】:

        【解决方案4】:

        试试这个

        SELECT * 
        FROM table1, filter_table1 
        WHERE table1.id NOT IN (SELECT id_table1 FROM filter_table1 WHERE id_user='1') 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-26
          • 1970-01-01
          • 2012-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多