代码之家  ›  专栏  ›  技术社区  ›  Alberto

在“in”运算符上指定表列

  •  0
  • Alberto  · 技术社区  · 6 年前

    我想知道是否有任何快捷方式来指定列的位置 IN 必须检查是否匹配。

    例子:
    与此相反:

    select * 
    from table1
    where id in(
        select column
        from table2
    ) 
    

    大概是这样的:

    select * 
    from table1
    where id in table2.column
    

    TABLE 对于 IN, ANY, SOME

    :使用 join NOT IN 接线员,还有 JOIN

    2 回复  |  直到 6 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    SQL中没有这样的快捷方式。让我解释一下原因。

    在一项质询中, 表参考需要在 FROM table2.col 除非 table2 已在中定义 条款 实际上是一个 别名

    从性能角度来看,我建议 exists :

    select t1.* 
    from table1 t1
    where exists (select column
                  from table2 t2
                  where t2.column = t1.id
                 ) 
    

    特别是,这可以利用 table2(column) 语义和 in .

        2
  •  1
  •   Bill Karwin    6 年前

    使用联接要短一点。至少它不需要子查询或其他查询 SELECT ... FROM .

    SELECT table1.* 
    FROM table1
    JOIN table2 ON table1.id = table2.column
    

    虽然这个简单的例子是一个内部连接,而不是半连接。内部联接是不同的,因为它在表2中每匹配一行生成一行。半联接只为表1中的每一行生成一行,即使它与表2中的多行相匹配。

    如果要模拟半连接,请使用 DISTINCT 要将结果减少到表1中每行一行,请执行以下操作:

    SELECT DISTINCT table1.* 
    FROM table1
    JOIN table2 ON table1.id = table2.column
    

    SELECT table1.* 
    FROM table1
    LEFT OUTER JOIN table2 ON table1.id = table2.column
    WHERE table2.column IS NULL