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

在mysql中,内部连接中的ON语句可以接受OR子句吗?

  •  -2
  • SMGreenfield  · 技术社区  · 2 年前

    内部联接的ON子句可以接受AND吗?

    在以下(目前正在运行的)mysql示例中:

    SELECT p.pk_ProductID
    FROM Product p
    INNER JOIN SerialNumber sn
    
    ON sn.fk_ProductID = p.pk_ProductID
    
    WHERE sn.pk_SerialNumberID = %s AND p.ProductGUID = %s
    
    LIMIT 1
    

    添加带有序号的OR子句合法吗。fk_ProductID2类似于:

    ON sn.fk_ProductID = p.pk_ProductID OR sn.fk_ProductID2 = p.pk_ProductID
    

    如果合法,应放在括号内:

    ON (sn.fk_ProductID = p.pk_ProductID) OR (sn.fk_ProductID2 = p.pk_ProductID)
    

    注:我回顾了几个看似相似的问题,其中包含相互矛盾的建议。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Bill Karwin    2 年前

    像你展示的那样写一个查询是合法的。后面的表达式 ON 关键字可以是任何布尔表达式。严格地说,它甚至不必引用您要加入的任何一个表。

    不必使用括号,因为运算符的优先级 = OR 很明显 = 绑得更紧。看见 https://dev.mysql.com/doc/refman/8.0/en/operator-precedence.html 详细信息。