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

MySQL连接问题

  •  0
  • robjmills  · 技术社区  · 15 年前

    这个SQL有什么问题?它应该返回结果,但不返回任何内容

    SELECT `pid` 
      FROM `products` 
      LEFT JOIN `prods_to_features` 
        ON (`ptf_pid` = `pid`) 
     WHERE (   `ptf_id` = '66' 
            OR `ptf_id` = '67'
           ) 
       AND (`ptf_id` = '76')
    

    对于左联接中使用的表,不可能有第二个where子句吗?

    5 回复  |  直到 15 年前
        1
  •  4
  •   bobince    15 年前

    正如其他人所说,WHERE子句毫无意义。

    我猜你想说的是你想要的产品有一个功能-76和一个功能-66或-67。你需要两个连接:

    SELECT DISTINCT products.pid
    FROM products
    JOIN prods_to_features AS ptf1 ON ptf1.ptf_pid=products.pid
    JOIN prods_to_features AS ptf2 ON ptf2.ptf_pid=products.pid
    WHERE ptf1.ptf_id='76'
    AND ptf2.ptf_id IN ('66', '67')
    

    区别在于,如果产品同时具有特征66和67,则确保只返回一份产品副本。

        2
  •  7
  •   Marcus Adams    15 年前

    看看你的WHERE子句。

    你不可能有价值 (66 OR 67) AND 76 同时。对于表达式,每行都将返回false,因此不会返回任何行。

        3
  •  5
  •   Peter Lang    15 年前

    你检查一下

    (`ptf_id` = '66' OR `ptf_id` = '67') AND (`ptf_id` = '76')
    

    这和

       (`ptf_id` = '66' AND `ptf_id` = '76' )
    OR (`ptf_id` = '67' AND `ptf_id` = '76')
    

    这意味着 ptf_id = 66 = 76 ptf_id = 67 = 76 不太可能。

        4
  •  2
  •   Chris    15 年前

    prods_to_features 有两个不同的值 ptf_id (the) AND 在Where子句中)。

    pid 为了你的一两个朋友 ptf\标识 在Where子句中。这取决于你想做什么。

        5
  •  2
  •   Timothy    15 年前

    其中(ptf_id=66或67)和(ptf_id=76)

    这是行不通的。